ML }  X c0C)HCCH Mhhݩh `eCDiCD`  RyHP   * 1H0芢@) Y0.Ș` i #(PMR\ \b Pgi 0  % @ / ՠ`d   0DDԝLyNN@  )?HI Y0`HIJH) * J j * hJJJ )HJ h i     } YS S0 i`΢ϣ߳H J3xj2h} 1 |9 ӭ45(420 * (0241өX.`  R *i)Lvw  ~*P}E 5 LN(G E  r s k rsrL ( E LO(0d( L iE0O +)$IC  H S8 }q p h   j 8no CDLQ CFl M  LO Ri)Llk2'")*F }$F$F$F$F$ 5 )ШF/Șl]kpqС,LQ/A! Ti)Zlk@ ܬ/i)(")")k }$F$F$F 5$/L /lF@jj(LNkle$$%8(k()` R 8 ELO Ri)^>jf | NrC s } ) vw5g   enfo Glvw LQ@iLm>j FL ~Jjjjii p qEh }jlrs`LQ:$ȱ$@+[_#{ 8  Խut! ai 8   E I   ] C } H h    ˰ 8  N   Lm E  ,  [ `LQ ,/ 8 ~/  Ơ? ѩ}/  [ /Lj0?MoLn FjMqLp NklLOLQnLoMlNLO R"(+}ըHH`Q R!!  % !   / .   FȑF! /GF \H"+0+* }! F tLQnm: J~nTF1F  *n+)5! n (, n)1JJJn(n*o} I ,0  ci a oF? @ , 8,0 ʩ0H Eh   i}  D ]DmmFLQvtu`*&!*@h ] 0 ^0` c 0l$$%}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 h}`hhh&JJ ](ll  LQ0  /qnoHH 9 9 H H  I9  9 } Nd EH  Q8 o n  FnoL HII/ Ih8`h`Lnon`no`u F }E VEhLO/luF l0BF/lɜɛ׽hE N  b VFL FREE SECTORS C} H) *Fh ):FȽ F FC IH' 0 d  i:Fȩ/F.l`CD/08HDIC}IHȰ/F`ȱ$>.+.i ȱ$:刄H !A \ Hȱ$*?ȝ 2. ? [_{ ,0}-:) 0$:>WI  IТ,LQH  0hLd ~ t u`C ?( 0(C.` E } R =! .ti S0N EE D XC )0')AY  )ע ? 0E088FG \o}n  (HhLcL3 iJ i Lqp 0=rspnqopqlk`jZj0  j FL`H}FhȑFȽlFi0 h FFLFpvqwgneofLF pq7  G0i 0 FJJh1FqȱFpȱFk`B!}08`hEE D 8. =D}tui( TʩL`b!)    cȌaȌd b`aab}H8 hdaHcd8 cH hHH  \h hc` =Hh I8ih( t  ( t(!` L\}CJfCJfCJfCDfC` a  HII  INdh  `h  `n)8jHniPoijIjFIjFIjh` a } I 38  8H0 I  ' H LQ8j Y  8j NdY  &I &I &IHeH.p!}Iiq  `!.莿 2Jjj }.m Ȉ!m FG` ɩLQ z "} e Hi04 \ Ȍ  8 i h !`I0 `C Y8.`DOS SYS#} I  ` ~ݩ.C/`ba.m۩mѤC9 `C L] H  ,- '0 l $}, BLVDE`D1:AUTORUN.SYS8hhJ ȱHȱIȱBȱDȱEeeHHLV)  %}1*  ,,p-  0 I &  '0   Lw)l, 0  I&LD1:MEM.SAV&}E:D1:DUP.SYS{`8{W~ `FB] x;I2gAN+#pI)G+,`-E, '} D  C D     )16CS S)  C)D1 p p (}0 C9DI pCDL~CiCDiD` DD˙` d J)L !)}D L(( LL()  L| L( S LH 0p n  *} CY?  q  L L  ` )+} `A! d߰")-݆ "  $G@LLL&0") $G%,}H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0-})8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH).}  hyhyB q L> Lm JJ  Ln*` dB%'/}8  H H` 1 { LL   !L     Hh SY?  q  1L0}  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L1}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@2}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q3} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF 4} G) *Gȩ GȽG GȌd q q G`  8   0G  `D5}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y6}`piH n0)բY? 08`0 7}  0$L GGȽG L `8L`L8}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`9}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE:} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR;}1LJ舩9GIH`LJJ`HGHh l`<} S gL   8 rii `дCDCG W  =}C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}>}60  |||||DOS DOSDOS SYS }?}}}@}CDOS SYSA} 0`BDELV !B B}`LVUQ   ]   TU J ]L!T  #      TU C} L ? .  t`GBJ V~DEHI B V0dVD}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEhE}DEL8HI   0 HI,0 0  9 .G VLOF},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHIG} V0 0`B;DELV䌚 !B y`@ʆ v s? F0Ξ05: [ BDEHIH} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO I}STILL RUN DOS B;DE J V (` 9 V⪍ ઍ  -J}LLu DEHILV 9 .l 9 .l  `` s$B VBHK}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVLL}1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2eM}1i1232435ޥ<<8p}45 DIM DLI$(12):RESTORE 2080:FOR X=1 TO 12:READ N:DLI$(X)=CHR$(N):NEXT X:RESTORE 110 CHBAS=X*C256:A=USR(ADR(CLEAR$),PM-C256*O}C2,C256*C4):POKE 705,148:POKE 710,C0:POKE 712,148155 GOSUB 2000182 POKE 54286,1922000 IF PEEK(DL-C8)<>2 THEN 20702010 POKP}E 1791,X2020 POKE DL-C8,PEEK(DL-C8)+1282030 ADL=ADR(DLI$)2040 POKE 513,INT(ADL/C256)2050 POKE 512,ADL-(PEEK(513)*C256)20Q}60 POKE 54286,1922070 RETURN 2080 DATA 72,173,255,6,141,10,212,141,9,212,104,64C256)2050 POKE 512,ADL-(PEEK(513)*C256)20RTU qMENUMINDETDELASPEELOOPUFCURSLOSIDIGPUNCNUMCURVERCURSIMPMBASVDS} T}!!***************************!!* ATARI *!!* Puff-and-Sip U} *!!* Communication *!!* Program *!!* Version 2.0 *!!* (c)1V}983 *!!* Michael Long * !!*************************** 9 B B'(@}9AW}@_* MAIN LOOPd*!( s 7<%@, $('(*(nU@w#-@' I2X}U6-Ax"6-R:," ApG"A*"@%6-@V16-@=6-AY}G A`G"A*"@%6-@V16-@=6-AG A`6-%@B2H  Z} j"@V(@ 66.7@<@&,>6.pJ6-@V6-A` Aj A0#"@d[})"Av# A0 4p A A0 4n A A0 4l A5%2A\}@@1B2H5 '* GET LETTERS,'"A6.6.n' A06 A@>#6-+@:7<,,&@d]},$@&>6.7%@<%@&,J'6-@V6-@'6-AT$* GET PUNCTUATION'"A^}6.6.l' A "@ A0 A A#"A6)"A`# A0S""AD*F:@_},@?@F:@,%@I A S A0e""AD*F:@,"@?@F:@,%@`}Q@[ Ae A0S""AR*F:@,?@F:@,&@I A@S A0a}?5"AR*F:@,"*F:@,"? A0e""AR*F:@,"?@F:@,&@Qb}@@[ APe A0#"Ah A# A A"6.7@<@&,"6.p'6c}-@V6-@'6-A$S* GET NUMBERSXD"A&6.7@<@&,.6.p:6-AD A d}b Al6-@V6-@v$* CURSOR MOVE ROUTINESFF:@,"@*@@ <@e}@F A`"F:@,"" A06-%@ A`B6-@H*6-?:<<%<%%@,86f}-%@B A`6-&@ A`86-A*6-?:<<%<%&@,86-&@B2I$g}* CLEAR SCREEN ROUTINE 7%2A@@7A*p.(& ARE YOU SURE? PUFF=YES SIP=Nh}O1(4(J-@'@N p2446-R:,"*A@4 AP> i}"A@$H A RS(@}6-@H+B2ID6-?:<<%<%AV,P6-AVS$j}* PRINT CHARACTERK6-%+&@v,'@>(@>:@:7<,,%A(,H AK$N* SET SPEED NE(@k}}E(@% *N66(@% 4N77(@&l} >N7-@ 7(@ HN( 1 2 3 4 5((RNm}A@\N:-@A *6-R:,0: BfN)6-%@!A`)6-@pNBn}2HzN  B`N26-O:&A`,'@26-@%$@#N[%2A@@16-@Vo}@6-R:,L"@XB2H[$N B+u* INITIALIZATION0u&6-F:A,&@&A:u@p}+@u* CUSTOMIZE DISPLAY LISTu%%6-F:A`,%F:Aa,$AVuq%@@q+%@q}@?%@@eX%@ F:%@",q%@!F:%@#,u* TITLE PAGEu,(@},(@r} ATARIv@!(@ PUFF-AND-SIP@(@ COMMUNICATION v-(@ PROGRAM-(@ vs}<(@ (C)1983<(@ MICHAEL LONGWv* SET UP P/M GRAPHICS\vBBy6-$AVfv+-%At}%Ah'+ pv3 #B%-%A%A)"/3 zv3 #B%-%AV%Ac)"/u}3 vKB2HA('B2I@H9AKAv9AY@F'B2w@9v}A#@v* INITIALIZE VARIABLESv<<;A,;@&,;@&,;@&,;@,vK6-A(6-@w}'6-@H36-AV?6-@K6-@vI567@<@&,.TAOSWIHCBFPMRELNDUGYJVQKXZI* INITIAL LETTERx}Sv=567@'<@R,.NTRLSIDCYMGPVBUKFWXZEHJAOQ=* A *v=567@S<@x,.ELYOAURISBJMTCVDEGHKNPQWXZ=* B *y}v=567@y<A,.OEHATIRLUKCYSMNDQBFGJPVWXZ=* C *v=567A<A0,.EIAOUSRYDMGLVNWJCBTFHQKPXZ=* D *w=5z}67A1<AV,.RNSDALECTMVWPIXFGYUOBKQHJZ=* E *w=567AW<A,.OIERFATULYSMNBCDGHJKPQVWXZ=* F *w=567{}A<A,.ERHOAIUNSTLGYMDBCFJKPQVWXZ=* G *$w=567A <A4,.EAIOTRUYNSLMCWDBHFGJKPQVXZ=* H *.w=567A|}5<A`,.NSTOCLDEARMGVFPBZKXIUQHYJW=* I *8w=567Aa<A,.UOEAIRBCDFGHJKLMNPQSTVWXYZ=* J *Bw=567A}}<A,.EISNAHLOKYRBDFMTUCGJPQVWXZ=* K *Lw=567A<A8,.EILAYODSUTGFMKVPRCBWNHJQXZ=* L *Vw=567A9<~}Ad,.EAIOPMBUSYNCRFLTVDGHJKQWXZ=* M *`w=567Ae<A,.DTGESICAONYUMFLVKWHRJQBPZX=* N *jw=567A<A},.NRFUMLTSWVPDOCBIAGKYEHJXZQ=* O *tw=567A<AB,.REOALPUITHSMYCNBDFGJKQVWXZ=* P *~w=567AC<Ah},.UABCDEFGHIJKLMNOPQRSTVWXYZ=* Q *w=567Ai<A,.EIOASTNYMDRKUGCLVPBFHWXJQZ=* R *w=567A<A ,.}TEISOAUHPCLMKYWDRFNBQGJVXZ=* S *w=567A!<AF,.HEIOARSTYULWMCNFVZBPDGJKQZ=* T *w=567AG<Ar,.NR}TSLCEBPGAMIDFUOKVYHXZJQW=* U *w=567As<A,.EIAOYDSMUVBCFGHJKLNPQRTWXZ=* V *w=567A<A$,.AIEHO}SNRLDYTBCFGJKMPQUVWXZ=* W *w=567A%<AP,.PTECIAXHMOBDFGJKLNQRSUVWYZ=* X *w=567AQ<Av,.EOSIAMPR}LNTUCWDYBKZFGHJQVX=* Y *w=567Aw<A,.EAIOZLUBCDFGHJKMNPQRSTVWXY=* Z *w6.7@<@&,wl!67@}<@,..,;:?!A67@<@,.>:@4,l67@<@&,.' fb c()+-*/=<>&@#^w$$6.0123456789$%.012345}6789$%.x 6.pKx * CURSOR VERTICAL MOVEMENTPx6-A6Zx1 #B!-@C%"-%1 x* CUR}SOR IMAGE ROUTINEx6-%@Dx1 #B!-@%"-%1 x$y* CURSOR DATAy%%255,129,129},129,129,129,129,255wy* VERTICAL MOVE DATA|yHH104,162,5,104,149,220,202,16,250,198,220,198,222,160,0,177,224,170yff1}68,165,223,240,9,169,0,145,222,136,208,249,138,168,165,221,240,7,177,224,145,220,136,208,249,96y* DATA FOR CURSOR IMAGE}y''8,255,129,129,129,129,129,129,255D2:PUFFSIP.BAS0,7,177,224,145,220,136,208,249,96y* DATA FOR CURSOR IMAGE=10 *=$60020 SED ;DECIMAL MODE30 LDA OLDBAL ;GET LOW BYTE40 SEC ;FIRST SUBTRACT50 SBC } WITHD ;SUBTRACT LOW60 STA NEWBAL ;STORE RESULT70 LDA OLDBAL+1 ;GET MED BYTE80 SBC WITHD+1 ;SUBTR }ACT MED90 STA NEWBAL+1 ;STORE RESULT0100 LDA OLDBAL+2 ;GET HI BYTE0110 SBC #0 ;SUBTRACT DUMMY0120 STA N }EWBAL+2 ;STORE RESULT0130 BRK ;ALL DONE!0140 OLDBAL .BYTE $73,$86,$100150 WITHD .BYTE $85,$420160 NEWBAL * }=*+30170 .END RESULT0130 BRK ;ALL DONE!0140 OLDBAL .BYTE $73,$86,$100150 WITHD .BYTE $85,$420160 NEWBAL * 10 *=$60020 CLD ;BINARY MODE!30 LDX #9 ;10 BYTES TO DO40 SUBLP LDA TABLE1,X ;GET BYTE 15}0 SEC ;SINGLE-BYTE!60 SBC TABLE2,X ;SUBTRACT BYTE270 STA TABLE3,X ;AND STORE IT80 DEX } ;NEXT BYTE90 BPL SUBLP ;DO ALL 10 BYTES0100 BRK ;ALL DONE!0110 TABLE1 .BYTE $10,$18,$40,$86,$9}A0120 .BYTE $A0,$BC,$C0,$F0,$F80130 TABLE2 .BYTE $00,$08,$14,$2F,$9A0140 .BYTE $90,$0B,$22,$65,$780150 TABL}E3 *=*+100160 .ENDBC,$C0,$F0,$F80130 TABLE2 .BYTE $00,$08,$14,$2F,$9A0140 .BYTE $90,$0B,$22,$65,$780150 TABL10 *=$060020 LDA #5 ;5 IN ACCUMULATOR30 STA VALUE ;AND IN VALUE40 INC VALUE ;VALUE = 650} INC VALUE ;VALUE = 760 INC VALUE ;VALUE = 870 BRK ;ALL DONE!80 VALUE *=*+190 .END50{10 *=$60020 CLD ;BINARY MODE30 LDA #5 ;SET COUNTER...40 STA COUNT ;TO 550 LDA }#7 ;SET ADDVAL...60 STA ADDVAL ;TO 770 LOOP LDA ADDVAL ;GET ADDVAL80 CLC ;SINGLE-BYTE ADD90 } ADC ADDVAL ;ADD TO ITSELF0100 STA ADDVAL ;SAVE RESULT0110 DEC COUNT ;HIT ZERO YET?0120 BNE LOOP ;}NO! LOOP BACK0130 BRK ;ALL DONE!0140 ADDVAL *=*+10150 COUNT *=*+10160 .END YET?0120 BNE LOOP ;a10 *=$60020 LDA #$4C ;$4C IN ACCUM.30 ORA #$11 ;OR WITH $1140 ORA OR3 ;OR WITH $8050 }BRK ;ALL DONE!60 OR3 .BYTE $8070 .END ORA #$11 ;OR WITH $1140 ORA OR3 ;OR WITH $8050 6<czXPOINTSYPOINTSA A< @@ @ 9@ ,9@ ,-@  }"68,- (-@ 2"68,- < +@@F-@ P,8,8,Z } d* X-COORDINATE DATAn##20,16,20,24,12,28,16,20,24,20x* Y-COORDINATE DATA6,8,8,8,9,9,10,10,10,12 }D2:SALFORTH.BASRDINATE DATAn##20,16,20,24,12,28,16,20,24,20x* Y-COORDINATE DATA6,8,8,8,9,9,10,10,10,12 12CDDSDATHEXLINDATLIDDBYTPASCHKSUTOTAIN@$} *** CRASH DIVE ***I @ 1(MAKE CASSETTE (0), OR DISK (1)5$}I!@@ C BC0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,14,15(r;@,9@",/-$}@"3"<68,-@ L6-A V#A` A r( CHECKING DATA286-%@(LINE:!"8B:,@$}A <F%6-F:A,%F:A,$AV+C(LINE  MISSING!FFq-@@@56-@:7<,,&$}@H[6-@:7%@<%@,,&@Hq6-8,$@%8,P."@*@ $". @PZ% 6-%$}!A %6-&Ad  ""@Pn A x F:A,@A "Ap($}A`*@A$)*@@<*@A%O*@@b*@A(u*@@1$}@<-@@%**@. 9@<(Ag+("INSERT DISK WITH DOS, PRES$}S RETURN8;@,<g@@ D:AUTORUN.SYS*@AU)*@AU<*@A$}(O*@@1b*@Au*@@X A{((READY CASSETTE AND PRESS RETURNH@@$}A(C:R#A0f-@@@j"w*@{ M(( WRITING FILE#6-@/6-A 9#A$}C A M @P(BAD DATA: LINE __0,55,88,31,127,31,169,0,141,47,2,169,60,141,2,211,169,0,141,231,2,133,$}14,169,56,141,232,2//133,15,169,128,133,10,169,31,133,11,24,96ddA2008E4402E886092065E44CB81F7070707042403C90100290100$}2901002020202020290100202901002028080,119dd1002020202020270418E1FA2FF9A20B22AA20CA00620772AA906A035205D2AA219A00720772AA9$}17A035205D2A,527ddA208A00920772AA922A035205D2AA205A01020772AA93BA035205D2AA203A01220772AA95AA035205D2AA9068D,277cc2C3$}C8D2D3CA9228D2F02207C2AAD1FD0C907F0F9AE1FD0E007D0F9C906F00AC903F00C20802A4C142020E92F4C,59dd9B20A205A01420772AA97DA035205$}D2A207C2A20252BC944F00DC943F00F20382E20802A4C472020422E4C6420,682dd20492EA9039D4203A9049D4A03A9009D4B032056E430DAA210A9C0$}9D4403A93A9D4503A9489D4803A9019D4903,753$ccA9079D42032056E430BA20382E20B22AA98E8D3002A91F8D3102A99CA035205D2AA90C8553A9C1A$}035205D2AA9,28.ddD7A035205D2A20152B20152B20152B20152B201D2BA903A036205D2A201D2BA924A036205D2A20152B20152BA9,7158dd27855$}3A9C48DC002A9308D01D0A9CA8D02D0A9408D03D0A2FF8E0ED08E0FD08E10D0E88E04D0E88E6F02A9038D,442Bdd09D08D0AD08D0BD0A9F08581A91E85$}82A90D8552A085A22CA906205CE4A9318D0002A92A8D0102A9C08D0ED4AD,551LddC23A4CA823A2FF9A20BC2CEEC03AD003EEC13AADC23AD01BA92020D$}82DF01420B22AA208A00320772AA928A03A,724Vdd205D2A4C192EADC03AC920D01EADC13AD019ADC73AD01420B22AA207A00320772AA96DA039205D2A$}4C192EADCB,209`dd3AF00ACED23AD005A9008DCB3AADCC3AF020A91C20D82DF019ADCB3AD01420B22AA208A00320772AA911A03920,112jdd5D2A4$}C192EADD33A101420B22AA209A00320772AA900A03A205D2A4C192EADC23AC912D00DA90420EB2DD006CE,122tddD33A4C0022A9018DD33AADCE3AD035$}AD0AD229F88DC33AAD0AD229F88DC43AADC93AF020ADC73A18D869088DC7,759~dd3A10148DCE3A20112DA955A038205D2AA917A03A205D2AA9228D2F0$}220E92B20112DA684E001D027AD0006A208,480ddDDD62EF010CA10F820092DA94DA036205D2A4CD02EBD53238591BD5C2385926C9100A920858A858B$}A201BD0006,261ddC920F012E8E48490F420092DA959A036205D2A4CD02E868DE0029002A202BD00069589CA10F8A200868E868CA0,417dd00B98$}900DDDF2ED008E8C8C00390F2B00DE68EA68CE8E8E8E05A90E1B0BEA58EC91CD00AA92DA037205D2A4CD0,704dd2EA68DE8A000BD0006998900E8C8C0$}0390F4A200868F868CA000B98900DD6E2FD008E8C8C00390F2B018E68FA6,490dd8CE8E8E8E07E90E120092DA962A036205D2A4CD02EA58E85A90AAAB$}D362F8591E8BD362F8592A58F85AAC927F0,358dd0DC928F013AABDE23B85906C9100A941A037205D2A4CD02EA956A037205D2A4CD02E8F8F8F8F8F8F$}65FE712323,354cc23232323232324A00C20752AA98FA036205D2AA222A00C20772A8680207C2A20252BC959F008A20C209E2A4CD0,17bb2E4CB8$}1FB593100AA97DA036205D2A4CD02ED8859F207C24A59F8DC23A20DC23A005B1A0999300B1A299990088,0dd10F3A201209E2AA00120752AAEC23ABD3$}E32BC5432205D2A205F2D202A2D20972D4CC92D0A85900A1865908590,906dd1869DA85A0A93A690085A118A590695E85A2A93B690085A360207C2420$}B22AA205A00B20772AA966A03A205D2A,355ddA9228D2F02207C2A20252BC944F00DC943F00F20382E20802A4C1A2420422E4C372420492EA9039D420$}3A9089D,771dd4A03A9009D4B032056E430DAA210A9C09D4403A93A9D4503A9489D4803A9019D4903A90B9D42032056E430BA20,981dd382E4C9B$}20A5A9858EA5AA858F4C1923ADC23A20DC23A005B9930091A0B9990091A28810F360A58FC916B0034C,138 bb572EA59020D82DD0034C8D2EA59020EB2$}DF0034C842EA590C914D00AA900A038205D2A4CCA2EC92AD027ADC23A,4ddD022A91B20D82DF00AA941A03A205D2A4CCA2EA90720EB2DD00AA985A03A$}205D2A4CCA2E20D62DF0034C722EA6,581ddA5A4A4B59999D43AA9FF9599205F2D20972D4CC92D20D82DF0034C962EADC23AC911F01820E92DF0034C7$}B2EA6,958(ddA5A4A4B9D43A9599A9FF99D43AD0D0207925D0E3A4A4A6A5B9D43A9D5E3BA9FF99D43AA988A039205D2AA590C9,5662dd2AF009205F$}2D20972D4CCA2EADCD3AD0F2A926A2058DCD3A9DE23BA26C9D5E3B207925A6A5A9159D5E3BD0D7A2,873<dd6DBD5E3B3007E8E07190F68A6086A5A9006$}0C916B0034C572EC91CF00EC920F00AC92AF0034C692E4C92244C08,768Fdd2520EB2DF00AA59020D82DF0034C842EA590C909D026ADD13AF0034CB12E$}20E92DF0034C7B2EA993A037205D2A,709PccA9188DD13AA6A59599205F2D4CCA2EC90FD0152044DAADC73A85D420FB2DA9DBA038205D2A4CCA2EC911D$}04BAD,74ZddC23AC90BF008ADC33AAEC43AD006ADC53AAEC63A85A786A8A9D3A038205D2AA211A00920772A2044DAA5A785D4,613ddd20FB2DA9D7A$}038205D2AA211A00A20772A2044DAA5A885D420FB2DD051C920D026ADD03AF0034CB12E20E92DF0,873ndd034C7B2EA993A037205D2AA9218DD03AA6A5$}9599205F2D4CCA2EC915D017ADCF3AD009A9C8A038205D2AD015A9,815xddBAA038205D2AD00C0AAABD9F26E8BC9F26205D2A4CCA2EA8373F398437C93$}7DA3784373F39DA37183884378437,371dd843784378437DA378437B637843784375B380038843784377D387D38843795388437843784377D387D3884$}3784,576dd3784378437B637843784379538DA3784377438A209DD0527F006CA10F84C572E4CA8250224080F1117181A1E1F,303dd20D82DD0034$}CA82EA59020EB2DF0034C842EA590C90AD02AA203ADC83AF012A9008DC83AA9029DE23B8599205F,433dd2D4CCA2EAD5F3BC907F0034CBA2E8EC83AA9$}24D0E4C90BD021AEC93AF00EA9008DC93AA9F3A038205D2AD00BE8,884dd8EC93AA902A039205D2A4CCA2EC90CD00DADC53AD81869088DC53A4C0F26C$}90DD00DADC63A38D8E9088DC63A4C,754cc0F26C90ED03BADC53ACDC33AD033ADC63ACDC43AD02BADCA3AF02620B22AA90E8DC6028DC802A9008DC502$}A20C,86ddA00B20772AA955A03A205D2AA9228D2F024CD4274CBA2EC90690034C572E20EB2DF0034C842EA590D014A9228D,370ddCC3A8599A904$}8598205F2D202A2D4CC92DC901D009A93FA039205D2AD031C903D009A9C9A037205D2AD024C905,904ddD009A9C7A036205D2AD017C922F00CC923F00$}8C925F004C927D00AA953A039205D2A4CCA2E4C572EA91520D82D,664ddF0034CC32EA59020EB2DF00AA59020D82DF0034C842EADCF3AD00AA9C8A038$}205D2A4CCA2EA955A038205D2AA9,732dd008DCF3AA590C901D01EA99FA039205D2AA9238599A2019DE23BE89DE23BA9038596205F2D202A2D4CCA2E2$}0D8,686dd2DF0034C962EA590C91AD00AA9AFA039205D2A4CCA2EC918F0034C692EADC23AC913D0F6A9278599A2069DE23B,950ddA9158594205F$}2D202A2D4CC92D20EB2DF0034C842EA58FC91890034CA82EA590C914D0034C9224C903F0034C57,422dd2EA91D20D82DD00FA9258599A2049DE23BA91$}18594D0C0A91620D82DD00AA9C4A039205D2A4CCA2E4CC32EA58F,549ddC926F0034C692EADCB3AD00BA9098DCB3A8DD23A4CC92D4C8D2EA92120D82D$}F0034CC32EA59020EB2DF0034C84,612dd2EA590C901D00AA9DBA039205D2A4CCA2EC906F0034C572EA9288599A2079DE23B8DCA3A4CD52820EB2DF00$}34C,609"dd842EA590C907F0034C572EA91920D82DD02FADC83AF01420B22AA209A00320772AA9E9A039205D2A4C192EA929,111,dd859AA2089DE2$}3BA9028D883BA2039DE23B4CD5284CC32E20D82DF0034C962EA590C91EF0034C572EA4A4A9FF99,4756ddD43AA941A038205D2AA91420EB2DD00FA6A5A$}92A9599A2169DE23BE89DE23B205F2D20972D4CCA2E20D82DD003,458@dd4CA82EA91E20D82DF0034CC32EA59020EB2DF0BA4C842EC91CF007C920F003$}4C572E4C9224488A489848A685BD,514Jdd4F2ABC562A8D0AD48D18D08C0DD0E68568A868AA6840706070607000600000000000F000A2008D44038C450$}3A9,744Tdd098D4203A97F8D48038E49034C56E4A20D8655845460A919D002A9648D00D2A9AA8D01D2A9008514A514C905D0,425^ddFAA2008E01D2$}CA8EFC0260BDC32B8586BDD62B8587A018A90091868810FB60A9408D0ED4856AA200A90C8D4203,815hdd2056E4A2008E4B03A9038D4203A9F48D4403A$}9348D4503A90C8D4A032056E4A9008D00D48D2F028D0DD08D0ED0,166rdd8D0FD08D10D0A2089DC002CA10FAA90E8DC502A9748DC402A2018EF002E886$}52A97085108D0ED260A9EDA03520,568|dd5D2A60A9F8A035205D2A60ADFC02C9FFF0F9A8A2FF8EFC0229C0F00620802A4C252B98A20DDD712BF0F2CA1$}0F8,534ddB97F2BC920F010C99BF00CC97EF008C96190DCD838E920A07F8483A4838C1FD0A208CA10FDC68310F2601C2C27,419dd3C36370F2002$}222606070E6C6A3B8A8B6B2B2A6F8070759B692D3D7680638C8D62787A348033361B3532312C20,818dd2E6E806D2F81728065797F747771398030377$}E383C3E66686480826773612040006075759DC5ED153D658DB5DD,540dd052D557DA5CDF51D3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3FD8A218A9$}209D0006CA10FAA00C20752AA2FF,621cc86808EFC02E8868420252BC920F008C97EF004C99BD00620802A4CF42B20FB2C2056E4E68420252BC99BF03$}2C9,70cc7ED010C68430E320FB2C2056E4A584F0BBD0E520FB2C2056E4E684A584C91890D720802A20252BC99BF006C97E,18ddF0D4D0F020FB2C$}86802056E4A01818B92D3E99053E2A2A2A2A2903AAB9053E291F1DBF2B990006A900992D3E88,266dd10DF60A9008585A580F029D8A5550A0A1869308$}D00D0AD2B02F00BA9F08D5B2A8581A93C8582A581C682D008A0,526dd1E848249F085818D5B2A4C5FE4A9B085AB85AC85ADA99B85AFADC03A85D4ADC1$}3A85D520AAD920E6D8D8A0FFC8,224ddB1F310FBA203B1F3098095ABCA8810F6A221A00020772AA9ABA000205D2A60A20B8E4203A2008E48038E49036$}0,941ddA945A036205D2A60A209209E2AE8209E2AA0094C752AA20D209E2AE8E01390F860A202209E2AA000A20086A6B5,496dd93300ABD592D99$}9D3CE6A6C8C8E8E00690EDA5A6D00CA00220752AA90CA039205D2A602E3325373524A203209E,231cc2AE8E00990F8A00320752AA20086A6868CB5993$}00CE6A6AABD9E34BCC934205D2AA68CE8E00690E7A5A6D007A9,45bb25A037205D2A60201F2DA00D20752AA20086A6868CBDD43A300CE6A6AABD9E34B$}CC934205D2AA68CE8E00690E6,2ddA5A6D007A925A037205D2A6020112DA9A4A036205D2A4CCA2EA9FFA205DDD43AF005CA10F88A6086A4A90060A9,1$}23ddFFA205D599F005CA10F98A6086A5A9006020AAD920E6D8D8A0FFC8B1F310FB297F91F3C8A99B91F3A5F3A4F44C,196&dd5D2AA20AA00520772$}AA92AA039205D2AA218A00720772AA960A039205D2A4CE81FA210A90C9D42034C56E4A9FA,3840ccA0344C4D2EA9F7A034A2109D4403989D450360A96B$}A036205D2AD06AA9C7A036205D2AD061A902A037205D2AD0,92:cc58A9D9A036205D2AD055A9EDA036205D2AD04CA9BCA036205D2AD043A9A9A036205D$}2AD03AA913A037205D2AD0,87Ddd31A96BA037205D2AD022A978A037205D2AD019A984A037205D2AD010A9E3A038205D2AD007A9A4A038205D2A20,589$}Ndd7C2A4C472120802A4C3A224E534557554451584154414B47455450554C44524F52454D4C4F4F45584153454152,910Xdd45415055535052454F5$}045434C4F5553454B494C53484F464952425245534D41494E53554E53484F4C554E4C43,348bcc5554504F554C5542475245574541474F2092249224C3$}2E08258C25A825A825A825F5260F270F27DA27A82E692E,68lddC32E45284528A82EA82EA228DE28292945297F29C929072A072A232A484154444F4F4C$}4F435343414752415452,464vdd41414952535749434142534947434150475245524544474F4C53494C57484947415550455253434F4449534455,818$}dd43534C4F424F4C554E495049535343524E4F544944204355544341525752454D41534741534B4E495348414D41,182dd4E5355494B4559425245$}425554494E56A213A9009DC03ACA10FAA200A9FF9D5E3B9DDA3AE8E08490F5A2059DD4,490dd3A95999593CA10F6A2018ECF3A8EC23AA9208DC53AA9A$}88DC63AA225BD48309DE23BCA10F7A227BD6E30BC9630,254dd99DA3ACA10F4A21FBDBE30BCDE30995E3BCA10F46000010102030405060708090A0B0C$}0D0E0F10101112131414,334bb15161718191A1B1C1C1D1E1F2021020004040206010F06040907050609060A081309150F0D0C0F0C13100E040F,1$}dd0E130F14120913130B010C0D1418191C1D20242526272D323638393B3F47494A51565A5B5C5D5E63666E727475,366dd767B7E8214070016080917$}0119020A0F0B10111F110C0D1B1C031E1A1D120405130E2006000106070C1213181E,480dd2A2B3031363C3D424344484E54555A60666C727374787E5$}36F6E6172207370686572659B457363617065207475,551dd62659B4163636573732074756E6E656C9B4361707461696E27732071756172746572739B$}466F72776172642070,149dd6173736167659B526164696F20726F6F6D9B4C6F6E6720636F727269646F729B536F6E61722073746174696F6E,831%}dd9B42616C6C61737420636F6E74726F6C9B436F6D6D616E642073746174696F6E9B4E617669676174696F6E2063,480dd656E7465729B5570706572%}206D697373696C65206261799B546F727065646F20726F6F6D9B576561706F6E7320,124dd6C6F636B65729B53686F776572207374616C6C739B43726%}57727732071756172746572739B47616C6C65799B56,873dd656E74696C6174696F6E20647563749B46616E20726F6F6D9B4D697373696C6520636F6E%}74726F6C9B45717569,566 dd706D656E74206261799B4C6F776572206D697373696C65206261799BFE0B1725384853616F7F8FA1B3C0CFDDED,642%}ddF4050E1E2C30313131313131313131313131313131313132323232436C6F7365642068617463689B4C6F636B65,863 dd6420646F6F729B426C616E%}6B207363616E6E65729B436C6F7365642067726174659B54726169746F7220776974,440*cc6820706973746F6C9B436C6F736564206169726C6F636B9%}B4C6F636B65642061726D696E67207377697463689B,374dd506F776572206361626C659B5369676E9B44656164206361707461696E9B477265656E206%}27574746F6E9B5265,632>dd6420627574746F6E9B476F6C6420627574746F6E9B53696C76657220627574746F6E9B57686974652062757474,308Hc%}c6F6E9B44657074682067617567659B5065726973636F70659B4469676974616C20646973706C61799B44756374,33Rdd20646F776E20746F2066616E% }20726F6F6D9B536C6F7420696E206169726C6F636B9B426F6C7465642D646F776E,417\cc20736F6E617220756E69749B506973746F6C9B54696E79207% }3637265776472697665729B53756963696465206E,80fdd6F74659B53656375726974792049449B4361626C6520637574746572739B436172649B57726% }56E63689B476173,769pdd206D61736B9B44756C6C206B6E6966659B5368616D706F6F9B54616374696373206D616E75616C9B5261646961,400zcc% }74696F6E20737569749B4B65799B4F70656E2068617463689B4F70656E20646F6F729B41637469766520736361,15dd6E6E65729B4F70656E20677261% }74659B446561642074726169746F729B4F70656E206169726C6F636B9B416374,661dd697661746564207377697463689B53657665726564206361626%}C659B526164696F61637469766520736F6E6172,261dd20756E69749B6A7783919EB2C1D6E2E7F4010C1826333F49596F7F969DAEBBC7D5DAE1EAF5FD%}0C1B1F2A34434E,994dd5B6879873232323232323232323232333333333333333333333333333333333333333333343434343434343434,534dd3%}434453A9B433A9B44313A47414D452E4441549B427269616E204D6F72696172747927739B4352415348204449,305dd56459B2843293139383420414E%}414C4F4720436F6D707574696E679B507265737320A0D3D4C1D2D4A020746F20,786dd706C6179206E65772067616D659B507265737320A0CFD0D4C9C%}FCEA020746F20726573746F7265206F6C642067,850dd616D659B526573746F72652066726F6D20C469736B206F7220C3617373657474653F9BA0C3D2%}C1D3C8A0C4C9D6,478ddC5A1A0A8D4CDA9A0A0A0A0A0A0C5D6C5CED4A0A3A0A0A0A0A0A09BA0CCCFC3C1D4C9CFCEA020A0A0A0A0C5D8C9,405ddD%}4D3A09BA0A0D6C9D3C9C2CCC5A020A0A0A0A0C9D4C5CDD3A09BA0A0A0A0A0A0A0A0A0A09BA0A0A0A0A0D7C8C1,221ddD4A09BA0A0C8C1D0D0C5CED3A0%}20A0A0A0A0A0D9CFD5D2A020A0D2C5D3D0CFCED3C5A09BA0A0A0A0A0A0D9CFD5,241ddA020A0A0A0A0A0A0C1D2C5A020A0C3C1D2D2D9C9CEC7A09B537%}96E7461783A9B42616420636F6D6D616E649B42,402dd616420766572629B426164206E6F756E9B54686174277320696D706F737369626C659B43616E%}277420676F2074,759 dd686174207761799B54797065205920746F20717569742067616D653A9B4F6B61799B416C726561647920686F6C,156 dd6%}4696E672069749B49736E277420686572659B43616E277420646F2074686174207965749B596F75722061726D,487 dd73206172652066756C6C219B4E%}6F7420656E6F75676820726F6F6D20686572659B4265206D6F72652073706563,761$ dd696669639B596F7520646F6E277420686176652069749B4E6F7%}468696E679B54797065204E2053204520572055,874. cc206F7220449B526566657220746F20697420627920636F6C6F729B54797065204920666F7220%}696E76656E746F,648 dd72799B446F65736E27742068656C709B57687920626F746865723F9B5365656D73206F7264696E6172799B596F,700B dd75%}20666F756E6420736F6D657468696E67219B497427732061697274696768749B456E656D7920617070726F61,158L dd6368696E67219B5363726577656%}420696E20706C6163659B4C6F6F6B732064616E6765726F75739B4E65656473,705V dd206B657920746F2061637469766174659B426F6C747320617265%}20746967687420262072757374799B44414E47,919` dd45523A20526164696174696F6E207A6F6E65219B427261696E7320626C6F776E206F75749B536%}8616D706F6F20,222j dd616C6C20757365642075709B42414E47219B4163636570747320736563757269747920494420636172649B4974,470t dd20% }676C6F77739B5365652070686F746F20696E20414E414C4F47202331389B416365206F662053706164657321,307~ dd9B4561736965722073616964207%!}468616E20646F6E659B4F6E6C7920312062756C6C65749B4E6F2062756C6C65,667 cc74739B58203D9B59203D9B464154484F4D539B4E6F7468696E67%"}2068617070656E739B537562206C6576656C73,57 dd206F66669B5375622064697665739B4E6F6E659B4120636C6F7564206F6620706F69736F6E6F75%#}73206761739B,556 cc6B696C6C7320796F7520696E7374616E746C79219B4C6F636B2069732076657279207365637572659B416C7265,51 dd6164%$}79206F70656E9B796F752061726520444541449B456E656D79206361707475726573207468652073756220,300 dd616E649B49742066616C6C7320646%%}F776E2074686520706970659B4C6F636B2064657374726F796564219B5472,745 dd79206578616D696E696E67207468696E67739B5363726577647269%&}766572277320746F6F2074696E799B4B6579,326 dd20776F6E2774206669749B41206A6F6C74206F66206869676820766F6C746167659B54726169746%'}F722073686F,638 dd6F747320796F7520616E649B537562206869747320626F74746F6D219B4120626C617374206F6620726164696F,941 dd6163%(}7469766974799B426F6C747320776F6E2774206C657420796F759B436F6E67726174756C6174696F6E7321,539 cc9B536176652067616D6520746F20C%)}469736B206F7220C3617373657474653F9B436F6E6E656374656420746F20,18 dd6361626C659B0000000000000000000000000000000000000000000%*}00000000000000000000000000000000000,676 D2:CRASH.BAS0,18 dd6361626C659B0000000000000000000000000000000000000000000$<>CdX; ------------------------nX; CRASH DIVE! (TM)xX; by Brian MoriartyX; ANALOG Computing #18X; (C)1984 ANALOG),} ComputingX; ------------------------X;X; MACRO DEFINITIONSX; -----------------X;X; POSITION MACRO)-}X; -------------- X; SYNTAX:X; POSITION xpos,yposX;POSITION  3 '3  APOS parame).}tersA"   ,%> 6 POSIT13@J$> T%> ^ POSIThr|X;X; PRINT MACROX; )/} ----------- X; SYNTAX:+X; PRINT X; PRINT    APRINTE parametersA)0} Q>4  %>5  EPRINTX;&X; TEXT MACRO0X; ----------: X; SYNTAX:DX; TEXT <"string">N)1}X;X TEXT b 3 l ATEXT parametersAv =EOLX;X; SYSTEM EQUATESX; ---------------)2}X;X; ZERO-PAGEX; ---------BOOT? ;; OS boot flagPOKMSK;; interrupt maskRTCLOK;)3}; system clockLMARGNR;; left marginRMARGNS;; right margin ROWCRST;; cursor rowCOLCRSU;; cursor column )4}RAMTOPj;; # pages of RAM*$FR0;; floating point register4CIX;; FP index register>INBUFF;; FP pointerHX)5};RX; PAGES 2-3\X; ---------fVDSLST;; DLI vectorp!SRTIMR+;; key repeat timerzSDMCTL/;; D)6}MA controlSDLSTL0;; D-list addrCOLDSTD;; coldstart flagGPRIORo;; PMG priorityPCOLR0;; player 0 c)7}olorPCOLR1;; player 1 colorPCOLR2;; player 2 colorPCOLR3;; player 3 color"COLOR0;; playfield 0)8} color"COLOR1;; playfield 1 color"COLOR2;; playfield 2 color!COLOR4;; background colorCRSINH;; c)9}ursor inhibitCH;; keypress registerICCOMB;; CIO commandICBADRD;; CIO addrICBLENH;; CIO length$):}ICAUX1J;; AUX byte 1.ICAUX2K;; AUX byte 28X;BX; CTIA/GTIALX; ---------VHPOSP0;; h-po);}s player 0`HPOSP1;; " " 1jHPOSP2;; " " 2tHPOSP3;; " " 3~SIZEP0;; width)<} player 0SIZEP1 ;; " " 1SIZEP2 ;; " " 2SIZEP3 ;; " " 3"GRAFP0 ;; graphi)=}cs player 0"GRAFP1;; " " 1"GRAFP2;; " " 2"GRAFP3;; " " 3!COLPF2)>};; color register 2CONSOL;; console keysX;X; POKEYX; -----#AUDF1;; frequency chan)?}nel 1 "AUDC1;; vol/dist channel 1AUDCTL;; audio control#RANDOM ;; random # generator( IRQEN;; inter)@}rupt enable2X;<X; ANTICFX; -----PDMACTL;; DMA controlZ"WSYNC ;; wait for horz syncdNMIEN)A};; NMI enablenX;xX; FLOATING POINTX; --------------FASC;; FP-to-ATASCIIIFP;; integ)B}er-to-FPZFR0D;; clear FR0X;X; OS ROUTINESX; -----------CIOVV;; CIO entry#SETVBV)C}\;; set v-blank vectorSYSVBV_;; OS VBI entrySIOINVe;; SIO initX;X; INTERNAL EQUATESX; ---------------)D}-X; X; MEMORY ALLOCATION" X; -----------------,"INLINE;; text input buffer6GAMEDATA:;; wo)E}rking area@)EDLIST <;; start of E: display listJ$SCREEN@<;; start of screen RAMTX;^X; Game play databasehX;r )F}GAMEDATA|X;EVENT ;; event #PLACE ;; locationSLAT ;; ship's latitude SLON ;; ship's longitud)G}e MLAT ;; missile latitude!MLON ;; missile longitudeDEPTH ;; sub's depth$GREEN ;; green button o)H}n/off RED ;; red button on/off&SWITCH ;; arming switch on/off!BREATH ;; holding breath?HATCH ;; )I}hatch opened?&UNIT ;; unit dropped in rm 17?CRASHED ;; sub crashed?BULLET ;; bullet used?SUIT )J};; suit searched?&$CAPTAIN ;; captain searched?0'BHOLD ;; breath holding counter:'TRAITOR ;; traitor wait c)K}ounterD%HOLDINGS ;; current inventoryN'VECTORS ;; current vector tableX'OBJECTS ;; current object tableb,)L}NTRANS &;; current translation matrixlX;vX; MISCELLANEOUSX; ------------- EOL SPACE X)M};X; ZERO-PAGEX; ---------X;X; Cursor controlX;$CURSEN ;; cursor on/off flag&)N}CSHAPE ;; current cursor shape#BLINK ;; cursor blink timerX; X; Keyboard handlerX; "CLICK ;; key cli)O}ck counter*&LENGTH ;; line length register4X;>X; DLI controlHX;R!DLICOL ;; DLI color index\X;fX; Screen)P} clearingpX;z'CLPOINT ;; screen clear pointer$CINDEX ;; window clear indexX; X; ParserX;PBUFF )Q};; parsing bufferPDEX ;; scanning index$LBREAK ;; pos. of space charVCODE ;; verb code #)UCODE )R};; untranslated noun code #'NCODE ;; translated noun code #'DOVECT ;; verb execution vector'CURVECT ;; c)S}urrent room vectors'CUROBJS ;; current room objects $NEWPLACE ;; next room code # (VPNT ;; addr of current)T} v-buffer (OPNT ;; addr of current o-buffer$ .INVPOS ;; position in inventory buffer. *ROOMPOS ;; position in)U} room buffer8 'ANY? ;; flag for empty room/invB &LATSHOW ;; latitude to displayL 'LONSHOW ;; longitude to disp)V}layV VLAST ;; last verb` ULAST ;; last nounj X;t X; Event counter~ X; EBUFF ;; printing buffer X; X)W}; INITIALIZATION X; -------------- X;  X; ENTRY $> &COLDST 2;; = 1 &BOOT?  SIOI)X}NV;; for sound init !TITLE X; !X; CUSTOM DISPLAY LIST( !X; -------------------2 DLIST< p=p=p=p;)Y}; blank 32 linesF % B=4SCREEN=5SCREEN;; text w/LMSP  =;; blank 4 w/DLIZ  ;; text (location)d  =;; blank 4 w/D)Z}LIn  ;; text (exits)x  =;; blank 4 w/DLI & =====;; text (v-items)  =;; blank 4 w/DLI  =;; te)[}xt (events)  =;; blank 4 w/DLI  =;; text (response)  ==;; blank 4 w/DLIs & =====;; text (i-i)\}tems)  p;; blank 8  A=4DLIST=5DLIST;; JVB X; X; TITLE SCREEN X; ------------ TITLE $> )]}B  NEWSCREEN;; reset E:" POSITION  =, #PRINT T0;; "Brian Moriarty's"6 POSITION =@ PRINT T1;; "CRASH DI)^}VE"J POSITION = T +PRINT T2;; "(C)1984 ANALOG Computing"^ X;h STARTOPr POSITION =| 1PRINT T3;; "Press )_}Ԡ to play new game" POSITION = 5PRINT T4;; "Press Π to restore old game" X; Q> PEDLIST ;; )`}modify PEDLIST ;; display list X; Q>" PSDMCTL;; restore screen BEEP X; X; Wait for selection X; POL)a}L QCONSOL R>;; scan until a& FPOLL;; key is pressed0 LETGO: $CONSOLD (>N HLETGOX R>;; START pressed?b !F)b}NEWGAME;; yes, do a new gamel R>;; OPTION pressed?v $FRESTORE;; yes, restore old game BADPOLL  BOOP;; else !POL)c}L;; resume scan X; X; Start new game X; NEWGAME INITDATA !PLAYSCREEN X; X; Restore a previous game X; )d} RESTORE POSITION = -PRINT T5;; "Restore from Disk or Tape?" BEEP DORT* GETKEY4 R> D;; disk?> FGETD)e}ISKH R> C;; tape?R FGETAPE\ DORTERRf CLOSE1p BOOPz !DORT X; X; Get game from disk X; GETDISK DPOINT)f} !READOPEN X; X; Get game from tape X; GETAPE TPOINT X; READOPENQ>;; OPEN command PICCOM9Q>)g};; READ$ PICAUX19.Q>8 PICAUX29B CIOVL GDORTERRVX;` X; Get game data thru IOCB #1jX;t GETDATA~$>Q>4)q}BJDOS SYSBNFONTFIX LSTB9RPUFFSIP BASBBOOT1 ASMBBOOT3 ASMBBOOT4 ASMBBOOT5 ASMBBOOT9 ASMBSALFORTHBASBCRASH BASB+CRASH1 ASMBCRASH2 ASMBlfCRASH3 ASMGAMEDATA PICBADR9Q>5GAMEDATAPICBADR9Q>H PICBLEN9Q>PICBLEN9Q>;; GET RECORD PICCOM9)r} CIOV GDORTERR CLOSE1 X;X; PLAYSCREEN INITX; ---------------(PLAYSCREEN2 NEWSCREEN;; r)s}eset E:<X;F X; Enable custom display listPX;Z Q>4DLISTd PSDLSTLn Q>5DLISTxPSDLSTLX;X; Print title & la)t}belsX;+PRINT T6;; "CRASH DIVE! (TM) EVENT #"Q> ;; set right marginPRMARGN;; for wraparound!PRINT T7;; "L)u}OCATION/EXITS" PRINT T8;; "VISIBLE ITEMS" BAR BAR BAR BAR;; 4 blank bars SAYWHAT;; "WHAT")PRINT )v}T11;; "HAPPENS/YOUR RESPONSE" SAYWHAT;; "WHAT"$PRINT T12;; "YOU ARE CARRYING"" BAR, BAR;; more blank bars6Q)w}>'@PRMARGN;; resetJX;TQ>;; green^PPCOLR0;; cursorhX;rX; Setup P/M borders & mask|X;Q>0PHPOSP1;; po)x}sition left Q>;; andPHPOSP2;; right borders Q>@;; andPHPOSP3;; title cover$>&GRAFP1;; set up&GRAF)y}P2;; side borders and&GRAFP3;; title mask 2;; = 0&SIZEP0;; set cursor width 2;; = 1!&GPRIOR;; set player prior)z}ityQ>PSIZEP1;; set border&PSIZEP2;; and mask0PSIZEP3;; widths:X;DQ>;; initNPCSHAPE;; cursor shapeX Q){}>;; andbPBLINK;; blink timerlX;vQ> PLMARGN;; init left marginX;%>4IMMVBI;; set VBI vector,$>5IMMVBI;)|}; specifyingQ>;; immediate-mode SETVBVX; Q>4DLIPVDSLST;; tell OS whereQ>5DLI;; we put our$PVDSLST)}};; DLI service routine!Q>;; set bits 6 & 7 of NMIEN$PNMIEN;; to enable DLIs and VBIsX;  QPLACE !REENTRY X;*)~}X; EVENT GENERATOR4X; --------------->X;H NEXTEVENTR$>;; empty stack\B;; just in case!f SHOW)}EV;; show event #p#EVENT;; updatezHRADIO;; event#EVENT;; counterX;X; Handle room 0X; RADIO QPLACE)} HENEMYQ> ;; got suit? OWNIT? FENEMY NEWSCREENPOSITION =,PRINT T79;; "A blast of radioactivit)}y" !KILLSX;X; Check for enemy takeover$X;. ENEMY8 QEVENTBR> L HLUNGSV QEVENT` HLUNGSj QDEPTHt H)}LUNGS~ NEWSCREENPOSITION =.PRINT T67;; "Enemy captures the sub and" !KILLSX;X; Limit breath-holdin)}gX; LUNGSQBREATH;; holding it?FPOISON;; no - skip this!"BHOLD;; else decrement countHPOISON;; continue i)}f NZQ>;; elsePBREATH;; release hold X;X; Handle poison atmosphereX;( POISON2QHATCH;; hatch opened?<F)}DOTRAIT;; not yetFQ>;; got theP OWNIT?;; mask?Z FDOTRAIT;; yup - you're safedQBREATH;; holding breath?n(HDOTRAI)}T;; good thing, otherwise ...x NEWSCREENPOSITION =,PRINT T62;; "A cloud of poisonous gas" !KILLSX;X)}; Handle traitorX; DOTRAIT QTRAITOR INTRAIT NEWSCREENPOSITION  =*PRINT T77;; "Traitor shoots you)} and" !KILLS NTRAITQPLACE;; is thisR>;; room 18?"HTRESET;; we're safe,Q>;; is the traitor6 INROOM?;;)} lurking?@HTRESET;; thankfully notJ$"TRAITOR;; else reduce wait timeT !DOCRASH^ TRESEThQ>r PTRAITOR|X;%X; )}Change sub coords, handle crashX; DOCRASH QCRASHED HPARSER QRANDOMM> PSLAT QRANDOMM> PSLON)}QRED FPARSER QDEPTH,-&O>0 PDEPTH: IPARSERD PCRASHEDN CLWHXPRINT T45;; "BANG!"b$PRINT T78)};; "Sub hits bottom!"lX;vX; INPUT PARSERX; ------------X; PARSERQ>" PSDMCTL# GETLINE;;)} put line into INLINE CLWH $LENGTH(>;; if length is 1"HDOCLAUSE;; check for legalityX;+X; Check for a leg)}al single-char commandX;QINLINE;; get the character $>;; init search index LEGSING  RSCOMS9*FEXSING;; matc)}hed! go do it40;; otherwise>ILEGSING;; keep searchingH SYNERR;; error, so printR#PRINT T14;; "Invalid command"\)}!BADPARSE;; and try againfX;p#X; Execute a single-char commandzX; EXSINGQSVECTL9;; fetch the lsbPDOVECT;; an)}dQSVECTH9;; msb of thePDOVECT;; execution addr!@DOVECT:;; and do it!X;"X; Find the 1st space character)}X; in the user's responseX; DOCLAUSE Q>SPACE PPBUFF PPBUFF$> FIND1$QINLINE9;; length is in X.)}R>SPACE;; is it a space?8FENDV;; yes!B2;; else keep scanningL (LENGTHV DFIND1` BADVERBj' SYNERR;; verb is no )}good, so printt'PRINT T15;; "Verb not recognized"~!BADPARSE;; and try againX;%X; Space char found, so record its)}&X; position and move the first half+X; of the clause into the parsing bufferX;ENDV &LBREAK(> DTOVB$>)}TOVB QINLINE9 PPBUFF9 0 ITOVBX;(X; Check for a legal verb2X;<$>;; init verb indexF &VCODEP VN)}EXTZ &PDEXd %>;; init buffer char indexn VSCANx$QPBUFF8;; get a char from bufferRVERBS9;; match?%HNEXTRY;; no)}pe - try another verb23)>!DVSCAN;; if all 3 chars matchELEGALV;; the verb is legal NEXTRY #VCODE $)}PDEX222(>NV;; out of verbs?!DVNEXT;; nope - keep scanning%EBADVERB;; else verb is worthless"X;,+X)}; Verb is legal, so fetch its execution6 X; vector@X;J LEGALVTQVCODE;; fetch verb #^R>;; if it's GO,hHMOVE2;; )}warn user:r'PRINT T29;; "Type N S E W U or D"| !BADPARSEX;!X; Move the second half of the$X; clause into the par)}sing bufferX; MOVE2&$LBREAK;; fetch pos. of space char 2;; plus 1 %>;; init buffer char index MOVENQINL)}INE9;; fetch characterPPBUFF8;; stuff into buffer23)>;; until 3 charactersDMOVEN;; have been movedX;&)}X; Check for a legal noun0X;:$>;; init noun indexD &UCODEN NNEXTX &PDEXb %>;; init buffer char indexl NSCANv)}$QPBUFF8;; get a char from bufferRNOUNS9;; match?&HNEXTRY2;; nope - try another noun23)>!DNSCAN;; if a)}ll 3 chars matchELEGALN;; the noun is legal NEXTRY2 #UCODE $PDEX222(>NN;; out of nouns? !DN)}NEXT;; nope - keep scanning" SYNERR;; else noun is garbage *PRINT T16;; "Noun not in vocabulary"* !BADPARSE4X;> X)}; Noun's code # is in UCODE;H X; verb's code # is in VCODE;R&X; verb execution addr is in DOVECT\X;f LEGALNpQVCODE;;)} fetchz PVLASTT?;; execution addr >;; andQVVECTS9;; save itPDOVECT;; in DOVECT2 QVVECTS9PDOVECT)} QUCODE PULASTR>';; was it BUTTON? FDOBUTTR>(;; was it INVENTORY? FDOINVE>QNTRANS9;; translate noun)} PNCODE$!@DOVECT:;; execute verb.X;8X; Handle BUTTONBX;L DOBUTTV(PRINT T30;; "Refer to it by color"` !BADP)}ARSEjX;tX; Handle INVENTORY~X; DOINVE(PRINT T31;; "Type I for inventory" !BADPARSEX;*X; EXECUTE)} SINGLE-CHAR COMMANDS*X; ----------------------------X;#X; COMMAND VECTOR TABLES#X; --------)}------------- SVECTL! 4DOM=4DOM=4DOM=4DOM=4DOM 4DOM=4DOQ=4DOX=4DOA SVECTH ! 5DOM=5DOM=5DOM=5DOM=5DO)}M 5DOM=5DOQ=5DOX=5DOAX;(X; HANDLE "Q" (QUIT)2X; -----------------<DOQFPOSITION  = P()}PRINT T19;; "Type Y to quit game:"ZPOSITION "= d&CURSEN;; enable cursorn BEEPx GETKEYR> Y FDOQUIT$>)}  ERASE !BADPARSE DOQUIT !TITLEX;X; HANDLE MOVEMENTX; ---------------X; ENTRY: Vect)}or (0-5) in XX;DOM QCURVECT9 IEXMOVE CANTGO"*PRINT T18;; "You can't go that way.", !BADPARSE6 EXMOVE@)}-;; for safetyJ PNEWPLACE;; save destinationT SAVELOC;; save status^ QNEWPLACE;; get destination,h!PPLACE;; make i)}t current, andr REENTRY|& BPOINT;; point to the new buffersX;X; Get new buffer dataX;%> RLOOP Q@VPNT7)} PCURVECT8 Q@OPNT7 PCUROBJS81 IRLOOPX;X; Refresh screen X; SHOWPLACE $>& " ERASE;; clear locat)}ion window0 POSITION  =: $PLACE;; get loc #D QRDLS9;; fetch lsb andN !%RDHS9;; msb of text addr andX  EPRINT;; p)}rint itb X;l $ SHOWVIS;; display visible itemsv $ SHOWVECTS;; display new vectors  SHOWINV;; show inventory !POKAY;;)} congratulations! X; "X; POINT TO NEW BUFFERS "X; -------------------- !X; ENTRY: Buffer # (0-23) in A )}X; BPOINT T?;; * 2 PNCODE;; save it T?;; * 4 , ONCODE;; *2 + *4 = *6!PNCODE;; save it !,!O>4VECTORS ! )}PVPNT*!Q>5VECTORS4!O>>! PVPNTH!,R! QNCODE\!O>4OBJECTSf! POPNTp!Q>5OBJECTSz!O>! POPNT!:!X;!$X; )} HANDLE "X" (SAVE GAME)!$X; ----------------------!DOX!" SAVELOC;; save current status! NEWSCREEN!)}POSITION = !2PRINT T82;; "Save game to Disk or Cassette?"!Q>"! PSDMCTL! BEEP" SAVEPOLL" GETKEY"R> D$" F)}DSAVE."R> C8" FCSAVEB" BADWRITEL" CLOSE1V" BOOP`" !SAVEPOLLj"X;t"X; Save to disk~"X;" DSAVE" DPOINT" !GSAV)}E"X;"X; Save to cassette"X;" CSAVE" TPOINT"X;" GSAVE"Q>" PICCOM9#Q> # PICAUX19#Q># PICAUX29(#)} CIOV2# GBADWRITE<#X;F#X; Write out game dataP#X;Z# WRITEd#$>n#Q>4GAMEDATAx# PICBADR9#Q>5GAMEDATA#PICBADR)}9#Q>H# PICBLEN9#Q>#PICBLEN9#Q> # PICCOM9# CIOV# GBADWRITE# CLOSE1#!PLAYSCREEN#X;$ X; )} HANDLE "A" (AGAIN)$ X; ------------------$DOA"$QVLAST;; restore old verb,$ PVCODE6$QULAST;; and noun@$ P)}UCODEJ$!LEGALN;; and do it again!T$X;^$X; SAVE LOC STATUSh$X; ---------------r$ SAVELOC|$ QPLACE$ )}BPOINT$%>$ SLOOP$ QCURVECT8$ P@VPNT7$ QCUROBJS8$ P@OPNT7$1$ ISLOOP$:$X;------r$ SAVELOC|$ QPLACE$ (]QdX; VERB EXECUTORSnX; --------------xX;&X; ENTRY: Translated noun code in AX; and in NC-}ODE;'X; untranslated code in UCODEX;X; TAKEX; ---- DOTAKE QUCODER>;; is it movea-}ble?EDT0;; yes !IMPOSSDT0 QNCODE OWNIT?;; already have it?HDT1 !ALREADY"DT1, QNCODE6 INROOM?-};; is it here?@FDT2J !NOTHERETDT2^ QNCODEhR>;; bolted unit?rHDT3|+PRINT T41;; "Bolts are tight & rusty"-}!GOODPARSEDT3R>*;; free unit? HDT3BQPLACE;; room 0? HDT3BQ>;; got wrench? OWNIT? FDT3A'P-}RINT T80;; "Bolts won't let you"!GOODPARSEDT3AQ>;; power cable INROOM? HDT3B&PRINT T83;; "Connected-} to cable"&!GOODPARSE0DT3B: INVSPACE?;; arms full?DFDT4N !ARMSFULLXDT4b"$ROOMPOS;; get object positionl%-}INVPOS;; and inv positionvQCUROBJS9;; pick it up!PHOLDINGS8;; add to inventoryQ>"PCUROBJS9;; leave a blank slo-}t SHOWALL SHOWVIS;; show room SHOWINV;; and inventory!POKAY;; done!X;X; DROPX; -----} DODROP OWNIT?;; do you have it?FDD0 !DONTHAVE DD0 QPLACE R>;; is this room 17?*FDROP17;; special ha-}ndling4DD1>% ROOMSPACE?;; enough room for it?H FDROPITR !ROOMFULL\ DROPITf $ROOMPOSp %INVPOSzQHOLDINGS8 P-}CUROBJS9Q>PHOLDINGS8 HSHOWALLX;X; Handle room 17X; DROP17" ROOMIN18?;; space in room 18?HDD1;-}; no - drop it in 17%INVPOS;; get inv position!$ROOMPOS;; and pos in room 18QHOLDINGS8;; pick up itemPOBJECTS9-};; and put in 18Q>;; clear inventoryPHOLDINGS8;; slot$*PRINT T68;; "It falls down the pipe". QNCODE8R>*;; d-}ropped the unit?B FDROPUNIT;; special handlingLD17BV SHOWVIS` SHOWINVj!GOODPARSEtX;~X; Handle UNIT in 17-}X; DROPUNITQUNIT;; init = 0 HD17BQ>&;; update traitor$>;; status inPUNIT;; unit flag,!PNTRANS9;; tr-}anslation matrix$>l;; and objectPOBJECTS9;; matrix ROOMIN18?;; find room$ROOMPOS;; for pistol Q>;; and -}POBJECTS9;; drop it in 18 HD17BX;( X; Find empty slot in room 182X;< ROOMIN18?F$>m;; skip 1st objectPRN18Z-} QOBJECTS9dGRN18A;; found a blank!n2x(>q;; scan to endDRN18;; of roomA;; return NZ status: RN18A&RO-}OMPOS;; save room posQ>;; set zero status:X;X; REMOVEX; ------ DOREMOVER>;; moveable-}?EDRM !IMPOSSDRMR>;; mask?" FGODROP,R> ;; suit?6 FGODROP@R>*;; unit?J FGOGRABT !BESPEC^ GOGRA-}Bh !DOTAKEr GODROP| !DODROPX;X; LOOK/EXAMX; --------- DOLOOK INROOM?;; is it in room?-}FLOOKOK;; if not, QNCODE OWNIT?;; do you have it? FLOOKOK!NOTHERE;; guess not LOOKOK QNCODER> ;; ca-}ptain?HLK0X;X; Search captain&X;0 EXAMCAP: QCAPTAINDFEC0N !SEEMSORDXEC0b ROOMSPACE?lFEC1v !RO-}OMFULLEC1$PRINT T35;; "Found something!"Q> PCAPTAIN $ROOMPOS PCUROBJS9 SHOWVIS!GOODPARSEX;-}LK0R>;; gauge?HLK1X;X; Read depth gauge X; READGAUGE  ZFR0* QDEPTH4PFR0> VPRINTHPRINT -}T55;; "Fathoms"R!GOODPARSE\X;fLK1pR>;; display?zHLK2X;X; Read navigation displaysX; READISP QPL-}ACER> ;; missile room? FSHOWMD QSLAT $SLON HDISHOW SHOWMD QMLAT $MLON DISHOW PLATSHOW &LONS-}HOW$ PRINT T53;; "X =". POSITION = 8 ZFR0B QLATSHOWL PFR0V VPRINT` PRINT T54;; "Y ="j POSITION =-} t ZFR0~ QLONSHOW PFR0 VPRINT HLKX X; LK2 R> ;; suit? HLK3 X; X; Examine suit X; EXAMSUIT-} QSUIT FES0 !SEEMSORD ES0  ROOMSPACE?( FES12 '!ROOMFULL;; "Not enough room here."< ES1F $PRINT T35;; "-}Found something!"P Q>!;; keyZ PSUITd $ROOMPOSn PCUROBJS9x SHOWVIS !GOODPARSE X; LK3 R>;; pistol? HL-}K4 X; X; Examine pistol X; EXAMPIST QBULLET HPX0;; init = 1 PRINT T52;; "No bullets" HLKX PX0 !P-}RINT T51;; "Only 1 bullet" HLKX" X;, LK46 T?;; * 2@ >;; use as an indexJ QLKLK9;; fetch lsbT 2;; and^ %LKLK9;; -}msb of text addrh  EPRINT;; print textr LKX| !GOODPARSE;; and exit X; $X; EXAM TEXT LOOKUP TABLE $X; -} ---------------------- LKLK  T36=T64=T34=T38  T39=T34=T64=T39  T42=T34=T34=T34  T34=T34=T39=T34-}  T37=T34=T34=T46  T41=T34=T34=T48  T48=T34=T49=T34  T34=T34=T48=T48  T34=T34=T34=T34  T37=T-}34=T34=T49  T39=T34=T47 X;& X; READ0 X; ----: DOREADD $> N RDLOOPX RREADS9b FREADOKl 0v-} IRDLOOP !IMPOSS READOK !DOLOOK X; X; READable nouns X; READS  =$===  ==== X; -}X; PUSH X; ---- DOPUSH OWNIT? HDPH !WHYBOTH DPH* QNCODE4 INROOM?> FDPH0H !NOTHERER-} DPH0\ QNCODEf R> ;; green button?p HDPH1z X; X; Handle green button push X; $> QGREEN FSCANON Q>-} PGREEN Q>;; blank scanner SCANNER PNTRANS9 PCUROBJS SHOWVIS !GOODPARSE SCANONQOBJECTS;; chec-}k cableR>$ FONGREEN.!NOTHAP;; "Nothing happens"8 ONGREENB &GREENLQ>$;; active scannerV HSCANNER`X;jDP-}H1tR> ;; red button?~ HDPH2X;X; Handle red button pushX;$RED FREDONQ>PRED"PRINT T59;; "Sub-} levels off" HREDX REDON 2;; = 1&REDPRINT T60;; "Sub dives!" REDX!GOODPARSEX;(DPH22R> ;; go-}ld button?< HDPH3FX;PX; Handle gold buttonZX;d QMLATn-x,O> PMLAT !SHOWMDX;DPH3R> ;; silve-}r button? HDPH4X;X; Handle silver buttonX; QMLON;-S> PMLON !SHOWMD"X;,DPH46R>;; whit-}e button?@ HSORRYJX;TX; Handle white button^X;h PUSHWHITErQMLAT;; missile =|RSLAT;; sub? HSORRYQMLON;;-} missile =RSLON;; sub? HSORRYQSWITCH;; missile armed? FSORRY NEWSCREENQ> PCOLOR2 PCOLOR4Q>-} PCOLOR1POSITION  = $PRINT T81;; "Congratulations!"Q>" PSDMCTL& SOLVED0 !SOLVED: SORRYD !NOTHAP;-}; "Nothing happens."NX;XX; OPENbX; ----l DOOPENvR>;; can't be OPENedDOP0;; if NCODE > 6 !I-}MPOSSOP0 INROOM?;; is it here?FOP1!NOTHERE;; nopeOP1QNCODE;; hatch?HOP2 HOPENQ>"!PHATCH-};; mark hatch as opened(PCUROBJS;; change in current objectsQ>;; open path to PCURVECT;; room 4 SHOWVIS  -}SHOWVECTS* !POKAY4OP2>R>;; door?HHOP3R'PRINT T64;; "Lock is very secure"\HOPXfOP3pR>;; grate?zH-}OP4$PRINT T38;; "Screwed in place"HOPXOP4R>;; airlock?HOP5%PRINT T23;; "Can't do that yet"HOPX-}OP5R>";; open hatch? FALOPENR>#;; open door? FALOPENR>%;; open grate? FALOPENR>';; open airlock?-}HOP6$ ALOPEN.!PRINT T65;; "Already open!"8OPXB!GOODPARSELOP6V !IMPOSS`X;jX; SHOOTtX; -} -----~ DOSHOOTQ>;; do you have OWNIT?;; the pistol? FSHT0 !EASIERSHT0 QNCODE INROOM? FSHT1-} QNCODE OWNIT? FSHT1 !NOTHERESHT1  QBULLET HSHT3PRINT T52;; "No bullets"(!GOODPARSE2SHT3<-}PRINT T45;; "BANG!"FQ>P PBULLETZ QNCODEdR>;; Locked door?n HSHOOTXx#PRINT T71;; "Lock destroyed!"Q>#;-}; change door status inPCUROBJS;; object matrix $>;; andPNTRANS9;; in the2;; translationPNTRANS9;; table-}Q>;; open west wallPCURVECT;; to room #5 SHOWVIS;; show door change SHOWVECTS;; and new vector SHOOTX-}!GOODPARSEX;X; INSERTX; ------ DOINSERT" OWNIT?, FINS06 !DONTHAVE@INS0J QNCODETR>-};; card?^ HINS1h(PRINT T72;; "Try examining things"r!GOODPARSE|INS1 R>;; ID? FINS2INSX !BESPEC-}INS2 QPLACER>;; room 19? HINSXQ>';; update objectPCUROBJS;; matrix $>;; andPNTRANS9;; translator-}Q>;; open south wallPCURVECT;; to room 21 INEXIT SHOWVIS& SHOWVECTS0 !POKAY:X;DX; UNSCREWN.}X; -------X DOUNSCREWb INROOM?l FUNS0v !NOTHEREUNS0 QUCODER>;; nothing you can carryDUNS1;;.} is unscrewable !WHYBOTHUNS1 QNCODER>;; bolted unit? HUNS2 !DOTAKEUNS2R>;; closed grate? FUN.}S3 !IMPOSS UNS3Q>;; do you have  OWNIT?;; the knife?*HUNS4;; nope4Q>%;; patch>PCUROBJS;; objectH $>.};; andR PNTRANS9;; translator tables\Q>;; open south wall tofPCURVECT;; room 17p HINEXITzUNS4Q>;; screw.}driver? OWNIT? HUNSX$PRINT T73;; "Blade's too tiny"!GOODPARSEUNSX !EASIERX;X; HOLDX; .} ---- DOHOLD QUCODER>&;; breath? FDHLD0 !BESPEC DHLD0$QBREATH;; already.HDHLD1;; holding8 Q>.} ;; it?BPBREATH;; if not, set timerLPBHOLD;; to 8 eventsV !POKAY` DHLD1j !ALREADYtX;~X; UNLOCKX; .} ------ DOUNLOCKQ>!;; key? OWNIT? FUNL0 !EASIERUNL0 QNCODE INROOM? FUNL1 !NOTHERE.}UNL1 QNCODE R>;; locked door? HUNL2#PRINT T75;; "Key doesn't fit"(!GOODPARSE2UNL2<R>;; locked switc. }h?F FUNL3P !IMPOSSZUNL3dQ>(;; unlockedn PCUROBJSx$> PNTRANS9 PSWITCH !INEXITX;X; CUT. }X; --- DOCUT INROOM? FDCT0 !NOTHEREDCT0 QNCODER>;; hummer? FDCT1 !IMPOSSDCT1"Q>. };; cutters?, OWNIT?6 HDCT2@ QGREENJ FCUTITT NEWSCREEN^POSITION  =h*PRINT T76;; "A jolt of high volta. }ge"r !KILLS| CUTITQ>);; severedPCUROBJS$> PNTRANS9Q>;; blank scannerPOBJECTS*$> PNT. }RANS9 !INEXITDCT2 !EASIERX;X; POURX; ---- DOPOUR OWNIT?&FDPR0 !DONTHAVE:DPR.}D QNCODENR>;; shampoo?X FDOSHAMb !IMPOSSl DOSHAMv%INVPOS;; removeQ>;; shampoo fromPHOLDINGS8;; invent.}ory'PRINT T44;; "Shampoo all used up"Q>;; is bolted unit INROOM?;; nearby?HPOURX;; nope$ROOMPOS;; else .}change toQ>*;; free unit PCUROBJS9$>;; patchPNTRANS9;; translation 2;; table PNTRANS9 POURX  SHOWV.}IS SHOWINV !GOODPARSE*X;4X; LUBRICATE>X; ---------H DOLUBER OWNIT?\HDOLf !WHYBOTHpD.}OLzQ>;; got the shampoo? OWNIT? FDOL1DOL0 !EASIERDOL1 QNCODE INROOM? FDOSHAM !NOTHEREX;.}X; WEARX; ---- DOWEARR>;; mask? FWEAROKR> ;; suit?$ FWEAROK. !IMPOSS8 WEAROKB !D.}OTAKELX;V IMPOSS`&PRINT T17;; "That's impossible."jHGOODPARSEtX;~ NOTYET*PRINT T23;; "You can't do that y.}et."HGOODPARSEX; BESPEC%PRINT T26;; "Be more specific."HGOODPARSEX; ARMSFULL-PRINT T24;; "You'r.}e carrying too much!" HBADPARSEX; ROOMFULL)PRINT T25;; "Not enough room here."  HBADPARSEX; NOTHERE(".}PRINT T22;; "It isn't here."2 HBADPARSE<X;F ALREADYP(PRINT T21;; "You already have it."Z HBADPARSEdX;n DONT.}HAVEx&PRINT T27;; "You don't have it." HBADPARSEX; NOHELP!PRINT T32;; "Doesn't help."HGOODPARSEX; .}WHYBOTHPRINT T33;; "Why bother?"HGOODPARSEX; SEEMSORD#PRINT T34;; "Seems ordinary."HGOODPARSEX;.} NOTHAP$PRINT T56;; "Nothing happens.""HGOODPARSE,X;6 EASIER@)PRINT T50;; "Easier said than done"JX;T G.}OODPARSE^ BEEPh!NEXTEVENTrX;| BADPARSE BOOP !PARSERX;X; SUBROUTINESX; -----------.}X;X; DLI ROUTINEX; -----------DLI5;; save A,A5;; X C;; and 5;; Y registers $DLICOL.};; fetch color index QDCOLS9;; fetch new color& %CURSES9;; and cursor shape0 PWSYNC;; wait for scan: PCOLPF2;; chang.}e colorD 'GRAFP0;; and player shapeN #DLICOL;; update indexX 7b ?;; restore Y,l 7;; Xv >;; and 7;; A registers 9;.}; back to mainline X; DCOLS  p=`=p=`=p==` CURSES  ==== CURSOR = X; $X; PRI. }NT MACRO SUBROUTINE $X; ---------------------- *X; ENTRY: Addr of EOL-terminated string!(X; in A/Y register.!}s (LSB/MSB). !X;! EPRINT !$>;; IOCB #0 (E:)*! PICBADR;; lsb of string addr4!#'ICBADR;; msb of string addr>!Q> ;;."} PUT LINE commandH! PICCOMR!Q>\!#PICBLEN;; lsb max string lengthf!&ICBLEN;; msb (0)p! !CIOVz!X;!$X; POSI.#}TION MACRO ROUTINE!$X; ----------------------!$X; ENTRY: X-pos in X, Y-pos in Y.!X;! POSIT13!$> ! POSIT! .$}&COLCRS! 'ROWCRS!:!X;!X; AUDIO PROMPTS!X; -------------"BEEP"Q>;; high tone" HBTONE$"X;..%}"BOOP8"Q>d;; low toneB" BTONEL" PAUDF1V"Q>;; dist/vol = 10`" PAUDC1j"Q>t" PRTCLOK~" SOUND" QRTCLOK"R>;; .&}5 jiffies" HSOUND"$>"&AUDC1;; silence!"0"&CH;; clear last key":"X;"!X; ERASE A STATUS LINE"!X; .'} -------------------"%X; ENTRY: Target line (0-18) in X.#X; # ERASE#QLADRSL9;; lsb of line addr# PCLPOINT(#QL.(}ADRSH9;; msb of addr2#PCLPOINT<#%>;; clear 25 charactersF#Q>P# CLLOOPZ#P@CLPOINT7d#1n# ICLLOOPx#:#X;#X; .)} INIT SCREEN#X; -----------# NEWSCREEN#Q>@# PNMIEN#PRAMTOP;; set system to 16K#X;#X; Close IOC.*}B #0 (E:)#X;#$>;; IOCB #0 (E:)#Q> ;; CLOSE command# PICCOM$ CIOV;; slam!$X;$"X; Re-open E: with new RAM size.+}"$X;,$$>;; E: again6$&ICAUX2;; zero this byte@$Q>;; OPEN commandJ$ PICCOMT$Q>4EADR;; point to "E:"^$ PICBADRh$ Q.,}>5EADRr$PICBADR|$Q> ;; allow read/write$ PICAUX1$ CIOV;; do the OPEN$X;$Q>$ PDMACTL$PSDMCTL;; shut of.-}f ANTIC$ PGRAFP0$ PGRAFP1$ PGRAFP2$PGRAFP3;; blank out borders$X;$$>;; all colors black$ COLOFF% PPCOLR09..}%0% ICOLOFF&%Q>0%PCOLOR1;; except text:%Q>tD% PCOLOR0N%X;X%$>b%#&CRSINH;; disable system cursorl% 2;; = 2v%&./}LMARGN;; fix margin%Q>p% PPOKMSK%PIRQEN;; disable BREAK key%:;; and return%X;%X; BLANK BAR%X; .0} ---------%BAR%PRINT T9%:%X;%X; "WHAT" BAR%X; ---------& SAYWHAT &PRINT T10&: &X;*.1}&$X; KEYBOARD INPUT HANDLER4&$X; ---------------------->&)X; These routines are based in part onH&3X; Steve H.2}oward's "Alternative Keyboard Handler"R&)X; (ANALOG Computing #15, pp. 96-103).\&X;f&X; FETCH A KEYPRESSp&X; .3} ----------------z& GETKEY&QCH&R>;; key pressed?&%FGETKEY;; not yet - keep scanning&X;&X; Analyze keycode&X.4};& ANALYZE&?;; save key for later&$>&&CH;; reset key&M>;; bit 6 or 7 set?&FLEGAL?;; nope&X;'X; Handle a.5} bad keypress'X;' BADKEY$' BOOP;; razz user and.'!GETKEY;; try again8'X;B'X; Look for illegal keysL'X;V' LEGAL?`'.6}C;; restore keycodej'$> t' KLOOP~' RILLEGAL9'!FBADKEY;; razz if illegal key'0' IKLOOP'X;'X; Get ATASCII equiva.7}lent'X;' QATASCI8'X;')X; Screen out numbers, pass EOL and BS'X;'R>SPACE;; space bar?'FCLK1;; that's okay(R>.8}EOL;; RETURN? (FCLK1;; fine by me(R>~;; backspace?(FCLK1;; love 'em((R> a2( DBADKEY<(-F(;P(S> ;; convert to upp.9}er caseZ(X;d(X; Click the speakern(X;x(CLK1(%>( 'CLICK(CLK2( %CLICK('CONSOL;; tick!($>;; click freq( .:}DELAY(0( IDELAY( "CLICK(ICLK2;; 128 times(X;(:;; ATASCII code in A)X;)X; ILLEGAL KEYS)X; .;}------------") ILLEGAL,) ;; escape6) ,;; tab@) ';; atariJ) <;; capsT) 6;; <^) 7;; >h) ;; =r)  ;; ,|) ;;.<} ;) ";; .) &;; /) ;; +) ;; *) ;; -)X;)&X; ATASCII CONVERSION TABLE)&X; ----------------.=}--------)&X; We use our own table because the),X; location of the ROM-based table varies)+X; depending on which computer y.>}ou have.)X;) ATASCI* l=j=;===k=+=** o==p=u==i=-==* v==c===b=x=z&* 4==3=6==5.?}=2=10* ,= =.=n==m=/=:* r==e=y==t=w=qD* 9==0=7=~=8=<=>N* f=h=d===g=s=aX*X;b*'X; .@} INTERNAL CONVERSION TABLEl*'X; -------------------------v* INTATA*  =@==`*X;*X; Y-OFFSET .A}TABLES*X; ---------------*"X; These two tables contain the**X; starting address of each status line**X; (absolut.B}e screen line address + 13).*-X; LADRSL holds the LSBs, LADRSH the MSBs.*X;* LADRSL*3 4SCREEN5=4SCREEN5=4SCREEN.C}]=4SCREEN*4 4SCREEN=4SCREEN=4SCREEN=4SCREEN%*7 4SCREENM=4SCREENu=4SCREEN=4SCREEN+7 .D}4SCREEN=4SCREEN=4SCREEN==4SCREENe +* 4SCREEN=4SCREEN=4SCREEN+ LADRSH +3 5SCREEN5=5SCRE.E}EN5=5SCREEN]=5SCREEN*+4 5SCREEN=5SCREEN=5SCREEN=5SCREEN%4+7 5SCREENM=5SCREENu=5SCREEN=5.F}SCREEN>+7 5SCREEN=5SCREEN=5SCREEN==5SCREENeH+* 5SCREEN=5SCREEN=5SCREENR+X;\+X; .G} FETCH INPUT LINEf+X; ----------------p+ GETLINEz+X;+X; Clear line input buffer+X;+-+$>+ Q>SPACE+ C.H}LINL+ PINLINE9+0+ ICLINL+X;+!X; Get first character of line+X;+ GETONE,POSITION  = ,$>, &CURSEN;; tu.I}rn on PMG cursor$,&CH;; clear key.,28,&LENGTH;; zero line lengthB, GETKEY;; fetch a keycodeL,R>SPACE;; first char no.J}t beV,FBADONE;; a space`,R>~;; a backspacej, FBADONEt,R>EOL;; or an EOL~, HPUT1,X;, X; Handle bad first character.K},X;, BADONE, BOOP;; razz user and,!GETONE;; try again,X;,X; Print 1st char,X;,PUT1, SETCIO;; to E:, C.L}IOV- #LENGTH -X;-X; Get rest of input line-X;(-REST2-" GETKEY;; grab another keycode<-R>EOL;; if it's an EOL,F-!F.M}GOTEOL;; line entry completeP-R>~;; backspace?Z-"HPUTNEXT;; no - send to screend-X;n-X; Handle a backspacex-X;- BACK.N}S-!"LENGTH;; if 1st char of line-GBADONE;; signal error- SETCIO;; E:- CIOV;; let CIO do backspace-QLENGTH;; if .O}length=0,- FGETONE;; handle as 1st char-HREST;; else continue-X;-X; Print latest character-X;- PUTNEXT- SETCI.P}O. CIOV;; print character.#LENGTH;; next position. QLENGTH".R>;; end of line?,.%DREST;; not yet - get another key.Q}6.X;@.X; Too many chars in line!J.X;T. GETLAST^. BOOP;; a warning razzh. GETKEYr.R>EOL;; must have an EOL|. FGOTEO.R}L.R>~;; or a backspace. FBACKS.HGETLAST;; insist!.X;.X; EOL recieved.X;. GOTEOL. SETCIO;; specify E:.&C.S}URSEN;; shut off cursor. CIOV;; and send EOL.X;.%X; Convert screen bytes to ATASCII.X; and move to INLINE/X;/%>.T}/ TOBUFF&/,0/#QSCREEN8;; grab screen byte:/%PSCREEN8;; move to upper lineD/U?N/U?X/U?b/U?l/M>;; transform.U} byte, andv/>;; use as an index/)QSCREEN8;; restore original value/M>;; clear bits 5-7/$LINTATA9;; merge with co.V}de table/PINLINE8;; send to buffer/Q>/&PSCREEN8;; clear response line/1/ ITOBUFF/:/X;/#X; IMMED.W}IATE VBI ROUTINE/#X; ---------------------/"X; Positions and blinks cursor,0X; resets DLI color index 0X;0 IMM.X}VBI 0X;*0X; Reset DLI color index40X;>0Q>H0 PDLICOLR0X;\0X; Okay to update cursor?f0X;p0!QCURSEN;; if enable flag .Y}= 0,z0 FVEXIT;; don't redraw cursor0X;0"X; Calculate cursor X-position:0X; XNEW = ( XOLD * 4 ) + 480X;0-0 QCOLCRS.Z}0T?0T?;; times 40,0O>0;; plus 480PHPOSP0;; use as h-pos0X;0!X; Don't blink cursor if a key1X; is being press.[}ed.1X;1QSRTIMR;; 0 = no press$1 FBLINK?.1X;81Q>B1 PCURSORL1PCSHAPE;; force cursor onV1Q><;; for at least`1PB.\}LINK;; 1 secondj1X;t1 BLINK?~1 QCSHAPE1"BLINK;; next jiffy1 HVEXIT;; don't blink until 01X;1X; Blink the cursor1.]}X;1%>1'BLINK;; reset timer1N>;; flip the cursor shape1#PCSHAPE;; and save it for later1 VEXIT1PCURSOR;; pl.^}ot the cursor1!SYSVBV;; sayonara2X; 2#X; DISPLAY EVENT COUNTER2#X; ---------------------2 SHOWEV(2X;._}22X; Initialize EBUFF<2X;F2Q> P2 PEBUFFZ2 PEBUFFd2 PEBUFFn2 Q>EOLx2 PEBUFF2X;2 X; Convert event # to ATA.`}SCII2X;2ECON2 QEVENT2PFR02 QEVENT2 PFR02$ IFP;; convert to floating point2 FASC;; then to ATASCII2.a}-2X;2 X; Determine length of number3X;3%>;; init loop index3 FINDE"33,3 Q@INBUFF7;; check characters63 IFINDE@3.b}X;J3#X; Change # to inverse video andT3X; move to EBUFF^3X;h3$>;; move 3 chars maximumr3TOEB|3 Q@INBUFF73L>;; se.c}t msb3PEBUFF9;; put in EBUFF30313 ITOEB3X;3X; Display contents of EBUFF3X;3POSITION !=3PRINT EBUFF.d}3:3X;3&X; SET CIO TO PUT CHAR MODE4&X; ------------------------4 SETCIO4$> &4 &ICCOM04$>:4 &I.e}CBLEND4&ICBLENN4:X4X;IO TO PUT CHAR MODE4&X; ------------------------4 SETCIO4$> &4 &ICCOM04$>:4 &I,3dX; SYNTAX ERRORnX; ------------x SYNERRPRINT T13;; "Syntax:":X;X; CLEAR WIN2g}DOWSX; -------------X; What Happens windowX;CLWH$> ERASE2 ERASE%>  !POSIT13X;2h}X; Inventory window"X;, CLINV6$> @ CLINV1J ERASET2^(>h DCLINV1r:|X;"X; DISPLAY ROOM VECTO2i}RS"X; -------------------- SHOWVECTS$> ERASE%>$> &ANY?SVL QCURVECT9 GVSKIP QV2j}NAMES9PSCREEN]8 #ANY?33& VSKIP02:(>DDSVLN QANY?X HVECTEXbPOSITION  =lPRINT T61;; "N2k}one"v VECTEX:X;X; Vector initialsX; VNAMES ANSEWUDAX;"X; DISPLAY ROOM OBJECTS"X; 2l}-------------------- SHOWVIS$> CLVIS ERASE2 (>  DCLVIS POSITION  =*$>4 &ANY?>SHV1H &2m}PDEXR QCUROBJS9\ GSHV2f #ANY?p>z QOBDLS9 %OBDHS9 EPRINTSHV2 $PDEX2(> DSHV1 QANY? HS2n}HEXITPRINT T28;; "Nothing" SHEXIT:X;X; DISPLAY INVENTORYX; ----------------- SHOWINV$2o} CLINV.POSITION  = 8$>B &ANY?LSHI1V &PDEX`QHOLDINGS9j GSHI2t #ANY?~> QOBDLS9 %OBDHS9 E2p}PRINTSHI2 $PDEX2(> DSHI1 QANY? HSIEXITPRINT T28;; "Nothing" SIEXIT: X;X; "OK2q}AY" PROMPTX; -------------( POKAY2 CLWH<PRINT T20;; "Okay"F!GOODPARSEPX;ZX; SEARCH INVENT2r}ORYdX; ----------------n INVSPACE?xQ> OWNIT?$> OLOOPRHOLDINGS9 FFOUND0 IOLOOPA:2s} FOUND &INVPOSQ>:X;X; SEARCH ROOMX; -----------"ROOMSPACE?,Q>6 INROOM?@$>2t}J IRLOOPT RCUROBJS9^ FFOUND2h0r IIRLOOP|A: FOUND2 &ROOMPOSQ>:X;"X; PRINT INTEGER IN2u} FR0"X; -------------------- VPRINT IFP FASC-%> VLOOP3 Q@INBUFF7& IVLOOP0M>: P@2v}INBUFF7D3N Q>EOLX P@INBUFF7b QINBUFFl%INBUFFv !EPRINTX;X; DEATHX; ----- KILLS2w}POSITION  =(PRINT T63;; "kills you instantly!" DEATHPOSITION = PRINT T66;; "YOU ARE DEAD" !START2x}OPX;X; CLOSE IOCB #1X; ------------- CLOSE1 $>Q>  PICCOM9* !CIOV4X;> X; P2y}OINT TO FILENAMESH X; ------------------R DPOINT\ Q>4FILEf %>5FILEp !POINTz TPOINT Q>4CADR %>5CADR2z} POINT$> PICBADR9CPICBADR9:X;X; INIT DATABASEX; -------------X; INITDATA2{} X; X; Set status flags X;$ $>. Q>8 ID0B PEVENT9L 0V IID0` X;j X; Clear vector/object matrixt X;~ $>2|} Q> ID1 POBJECTS9 PVECTORS9 2 (> DID1 X; X; Clear working arrays X; $> ID2 PHOLDINGS9 2}} PCUROBJS9 PCURVECT9 0( IID22 $>< &BULLET;; 1 bulletF !&PLACE;; start in escape tubeP Q> Z PMLATd Q>n P2~}MLONx X; X; Init tranlation table X; $>% ID3 QTRANS9 PNTRANS9 0 IID3 X; X; Init vector matrix X;2} $>' ID4 QVDATA9 %VSETS9 PVECTORS8" 0, IID46 X;@ X; Init object matrixJ X;T $>^ ID5h QODATA9r %2}OSETS9| POBJECTS8 0 IID5 : X; X; Translator data X; TRANS  =======  == = = = =2} =  =======  =======  ==== =! X; X; Vector data X; VDATA&  ==2}=====0  == ==== =:   === === = D  = ======N  ==== === 2}X VSETSb  = = =====l   =$=%=&='=-=2=6v  8=9=;=?=G=I=J=Q  V=Z=[=\=]=^=c=f  n=2}r=t=u=v={=~= X; X; Object data X; ODATA  ===== ==  == == ===  = = ==2}===  ====== = OSETS  ==== ===  =*=+=0=1=6=<==  B=C=D=H=N=T=U2}=Z  `=f=l=r=s=t=x=~ X; X; DICTIONARY* X; ----------4 X;> X; SINGLE-CHAR COMMANDSH X; -----2}---------------R SCOMS\  ANA;; 0 - Northf  ASA;; 1 - Southp  AEA;; 2 - Eastz  AWA;; 3 - West  AUA;; 4 - Up  A2}DA;; 5 - Down  AQA;; 6 - Quit  AXA;; 7 - Save  AAA;; 8 - Again X; X; COMPOUND VERBS X; -------------- VERBS2}  ATAKA;; 0 - take  AGETA;; 1 - get  APULA;; 2 - pull  ADROA;; 3 - drop AREMA;; 4 - remove ALOOA;; 5 - lo2}ok AEXAA;; 6 - examine$ ASEAA;; 7 - search. AREAA;; 8 - read8 APUSA;; 9 - pushB APREA;; 10 - pressL AOPEA;2}; 11 - openV ACLOA;; 12 - close` AUSEA;; 13 - usej AKILA;; 14 - killt ASHOA;; 15 - shoot~ AFIRA;; 16 - fire2} ABREA;; 17 - break ASMAA;; 18 - smash AINSA;; 19 - insert AUNSA;; 20 - unscrew AHOLA;; 21 - hold AUNLA;2}; 22 - unlock ACUTA;; 23 - cut APOUA;; 24 - pour ALUBA;; 25 - lubricate AGREA;; 26 - grease AWEAA;; 27 - 2}wear AGO A;; 28 - goX; NV;; total # of verbsX;X; VERB VECTOR TABLE(X; -----------------2 VVECTS< DO2}TAKE;; 0F DOTAKE;; 1P EASIER;; 2Z DODROP;; 3d DOREMOVE;; 4n DOLOOK;; 5x DOLOOK;; 6 DOLOOK;; 7 DOREA2}D;; 8 DOPUSH;; 9 DOPUSH;; 10 DOOPEN;; 11 WHYBOTH;; 12 BESPEC;; 13 EASIER;; 14 DOSHOOT;; 15 DO2}SHOOT;; 16 WHYBOTH;; 17 WHYBOTH;; 18 DOINSERT;; 19 DOUNSCREW;; 20 DOHOLD;; 21 DOUNLOCK;; 22" DOCUT2};; 23, DOPOUR;; 246 DOLUBE;; 25@ DOLUBE;; 26J DOWEAR;; 27TX;^X; COMPOUND NOUNShX; --------------r NOUNS|2} AHATA;; 0 - hatch ADOOA;; 1 - door ALOCA;; 2 - lock ASCAA;; 3 - scanner AGRAA;; 4 - grate ATRAA;; 5 - 2}traitor AAIRA;; 6 - airlock ASWIA;; 7 - switch ACABA;; 8 - cable ASIGA;; 9 - sign ACAPA;; 10 - captain2} AGREA;; 11 - green AREDA;; 12 - red AGOLA;; 13 - gold ASILA;; 14 - silver AWHIA;; 15 - white AGAUA;; 162} - gauge& APERA;; 17 - periscope0 ASCOA;; 18 - scope: ADISA;; 19 - displayD ADUCA;; 20 - ductN ASLOA;; 21 - sl2}otX ABOLA;; 22 - boltb AUNIA;; 23 - unitl APISA;; 24 - pistolv ASCRA;; 25 - screwdriver ANOTA;; 26 - note 2}AID A;; 27 - ID ACUTA;; 28 - cutters ACARA;; 29 - card AWREA;; 30 - wrench AMASA;; 31 - mask AGASA;; 32 2}- gas AKNIA;; 33 - knife ASHAA;; 34 - shampoo AMANA;; 35 - manual ASUIA;; 36 - suit AKEYA;; 37 - key A2}BREA;; 38 - breath ABUTA;; 39 - button  AINVA;; 40 - inventoryX; NN);; total # of nouns*X;4X; ROO2}M DESCRIPTIONS>X; -----------------HX;RRD0\TEXT ASonar sphereAfRD1pTEXT AEscape tubeAzRD22}TEXT AAccess tunnelARD3TEXT ACaptain's quartersARD4TEXT AForward passageARD5TEXT ARadio roomA2}RD6TEXT ALong corridorARD7TEXT ASonar stationARD8TEXT ABallast controlARD9TEXT AComman2}d stationARD10$TEXT ANavigation centerA.RD118TEXT AUpper missile bayABRD12LTEXT ATorpedo roomAVRD2}13`TEXT AWeapons lockerAjRD14tTEXT AShower stallsA~RD15TEXT ACrew's quartersARD16TEXT AGalley2}ARD17TEXT AVentilation ductARD18TEXT AFan roomARD19TEXT AMissile controlARD20TEXT AEq2}uipment bayARD21TEXT ALower missile bayA X;'X; ROOM DESC. ADDRESS TABLES'X; -----------------2}--------(RDLS2' 4RD0=4RD1=4RD2=4RD3=4RD4=4RD5<) 4RD6=4RD7=4RD8=4RD9=4RD10=4RD11F- 4RD12=4RD13=4RD14=4RD2}15=4RD16=4RD17P 4RD18=4RD19=4RD20=4RD21ZX;dRDHSn' 5RD0=5RD1=5RD2=5RD3=5RD4=5RD5x) 5RD6=5RD7=5RD8=5RD2}9=5RD10=5RD11- 5RD12=5RD13=5RD14=5RD15=5RD16=5RD17 5RD18=5RD19=5RD20=5RD21X;!X; OBJECT DESCRIPT2}IONS!X; -------------------X;OBD0TEXT AClosed hatchAOBD1TEXT ALocked doorAOBD2TEXT 2}ABlank scannerAOBD3TEXT AClosed grateAOBD4 TEXT ATraitor with pistolA"OBD5,TEXT AClosed airlockA62}OBD6@!TEXT ALocked arming switchAJOBD7TTEXT APower cableA^OBD8hTEXT ASignArOBD9|TEXT ADead cap2}tainA OBD10TEXT AGreen buttonA OBD11TEXT ARed buttonA OBD12TEXT AGold buttonA OBD13TEXT A2}Silver buttonA OBD14TEXT AWhite buttonA OBD15TEXT ADepth gaugeA OBD16TEXT APeriscopeA OBD172}TEXT ADigital displayA& OBD180"TEXT ADuct down to fan roomA: OBD19DTEXT ASlot in airlockAN OBD20X#TEXT A2}Bolted-down sonar unitAb OBD21lTEXT APistolAv OBD22TEXT ATiny screwdriverA OBD23TEXT ASuicide noteA2} OBD24TEXT ASecurity IDA OBD25TEXT ACable cuttersA OBD26TEXT ACardA OBD27TEXT AWrenchA O2}BD28TEXT AGas maskA OBD29 TEXT ADull knifeA OBD30 TEXT AShampooA* OBD314TEXT ATactics manualA> 2}OBD32HTEXT ARadiation suitAR OBD33\TEXT AKeyAf OBD34pTEXT AOpen hatchAz OBD35TEXT AOpen doorA 2}OBD36TEXT AActive scannerA OBD37TEXT AOpen grateA OBD38TEXT ADead traitorA OBD39TEXT AOpen a2}irlockA OBD40TEXT AActivated switchA OBD41TEXT ASevered cableA OBD42#TEXT ARadioactive sonar unitA2}X;$%X; DESCRIPTION ADDR TABLES.%X; -----------------------8 OBDLSB 4OBD0=4OBD1=4OBD2=4OBD3L 4O2}BD4=4OBD5=4OBD6=4OBD7V! 4OBD8=4OBD9=4OBD10=4OBD11`# 4OBD12=4OBD13=4OBD14=4OBD15j# 4OBD16=4OBD17=4OBD18=4OBD2}19t# 4OBD20=4OBD21=4OBD22=4OBD23~# 4OBD24=4OBD25=4OBD26=4OBD27# 4OBD28=4OBD29=4OBD30=4OBD31# 4OBD32=4OBD32}3=4OBD34=4OBD35# 4OBD36=4OBD37=4OBD38=4OBD39 4OBD40=4OBD41=4OBD42X; OBDHS 5OBD0=5OBD1=5OBD2=5OBD32} 5OBD4=5OBD5=5OBD6=5OBD7! 5OBD8=5OBD9=5OBD10=5OBD11# 5OBD12=5OBD13=5OBD14=5OBD15# 5OBD16=5OBD17=5OBD182}=5OBD19# 5OBD20=5OBD21=5OBD22=5OBD23# 5OBD24=5OBD25=5OBD26=5OBD27 # 5OBD28=5OBD29=5OBD30=5OBD31# 5OBD32=2}5OBD33=5OBD34=5OBD35# 5OBD36=5OBD37=5OBD38=5OBD39( 5OBD40=5OBD41=5OBD422X;<X; TEXTFX; ---2}-PX;ZEADRdTEXT AE:AnCADRxTEXT AC:AFILETEXT AD1:GAME.DATAT0TEXT ABrian Moriarty'sAT12}TEXT ACRASH DIVEAT2%TEXT A(C)1984 ANALOG ComputingAT3+TEXT APress Ԡ to play new gameAT4/2}TEXT APress Π to restore old gameAT5+TEXT ARestore from isk or assette?AT61TEXT AȠš2}ͩԠA"T7,"TEXT AΠ ӠA6T8@"TEXT AŠ ӠAJT9TTEXT A2}A^T10hTEXT AԠArT11|-TEXT AӠ Ҡ ŠAT12-TEXT Aՠ 2}Š ǠAT13TEXT ASyntax:AT14TEXT ABad commandAT15TEXT ABad verbAT16TEXT ABad n2}ounAT17TEXT AThat's impossibleAT18TEXT ACan't go that wayAT19!TEXT AType Y to quit game:A&T202}0TEXT AOkayA:T21DTEXT AAlready holding itANT22XTEXT AIsn't hereAbT23lTEXT ACan't do that yetAv2}T24 TEXT AYour arms are full!AT25!TEXT ANot enough room hereAT26TEXT ABe more specificAT27T2}EXT AYou don't have itAT28TEXT ANothingAT29 TEXT AType N S E W U or DAT30!TEXT ARefer to it by c2}olorAT31 !TEXT AType I for inventoryAT32 TEXT ADoesn't helpA*T334TEXT AWhy bother?A>T34HTEXT 2}ASeems ordinaryART35\!TEXT AYou found something!AfT36pTEXT AIt's airtightAzT37TEXT AEnemy approachin2}g!AT38TEXT AScrewed in placeAT39TEXT ALooks dangerousAT40"TEXT ANeeds key to activateAT41$2}TEXT ABolts are tight & rustyAT42$TEXT ADANGER: Radiation zone!AT43TEXT ABrains blown outAT44 T2}EXT AShampoo all used upAT45$TEXT ABANG!A.T468%TEXT AAccepts security ID cardABT47LTEXT AIt glowsAV2}T48`$TEXT ASee photo in ANALOG #18AjT49tTEXT AAce of Spades!A~T50"TEXT AEasier said than doneAT512}TEXT AOnly 1 bulletAT52TEXT ANo bulletsAT53TEXT AX =AT54TEXT AY =AT55TEXT AFATHOM2}SAT56TEXT ANothing happensA T59TEXT ASub levels offAT60(TEXT ASub divesA2T61<TEXT ANoneAF2}T62P%TEXT AA cloud of poisonous gasAZT63d!TEXT Akills you instantly!AnT64x TEXT ALock is very secureA2}T65TEXT AAlready openAT66TEXT Ayou are DEADAT67'TEXT AEnemy captures the sub andAT68#TEXT A2}It falls down the pipeAT71TEXT ALock destroyed!AT72!TEXT ATry examining thingsAT73#TEXT AScrewdr2}iver's too tinyAT75TEXT AKey won't fitA"T76,#TEXT AA jolt of high voltageA6T77@#TEXT ATraitor shoots 2}you andAJT78TTEXT ASub hits bottom!A^T79h%TEXT AA blast of radioactivityArT80| TEXT ABolts won't let yo2}uAT81TEXT ACongratulations!AT82+TEXT ASave game to isk or assette?AT83TEXT AConnected to cable2}AX;T81TEXT ACongratulations!AT82+TEXT ASave game to isk or assette?AT83TEXT AConnected to cable0